0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Python中进行Elasticsearch操作?

马哥Linux运维 来源:未知 作者:工程师郭婷 2018-07-20 11:12 次阅读

什么是ElasticSearch?

ElasticSearch(ES)是一个建立在Apache Lucene之上的高度可用的分布式开源搜索引擎。它基于Java构建的,因此可用于许多平台。数据以JSON格式非结构化存储,这也使其成为一种NoSQL数据库。与其他NoSQL数据库不同,ES还提供搜索引擎功能和其他相关功能。

ElasticSearch用例

ES可用于多种目的,下面给出了其中的几个:

你运营着提供大量动态内容的网站,比如电子商务网站或者博客。通过实施ES,你不仅可以为Web应用程序提供强大的搜索引擎,还可以在应用程序中提供原生自动补全功能。

你可以获取不同类型的日志数据,然后可以使用它来查找趋势和统计信息

设置和运行

安装ElasticSearch最简单的方法就是下载并运行可执行文件。必须确保使用的是Java 7或更高版本。

下载后解压缩并运行它的二进制文件。

如何在Python中进行Elasticsearch操作?

滚动窗口中会出现很多文字。如果你看到像下面这样的,那么它应该是完成了。

如何在Python中进行Elasticsearch操作?

但是,由于眼见为实,通过cURL 查看类似于这样的欢迎界面以便你知道确实成功安装了:

如何在Python中进行Elasticsearch操作?

在我开始访问Python中的Elastic Search之前,我们来做一些基本的东西。 正如我提到ES提供了一个REST API接口,我们将使用它来执行不同的任务。

基本示例

你要做的第一件事就是创建索引。一切都以索引形式存储。RDBMS概念中索引相当于一个数据库,因此不要将它与你在RDBMS中学习的典型索引概念混淆。使用PostMan来运行REST API。

如何在Python中进行Elasticsearch操作?

如果它成功运行,你会看到如下所示的回应:

如何在Python中进行Elasticsearch操作?

所以我们使用company为名创建了一个数据库。换句话说,我们创建了一个名为“company”的索引。你将看到如下所示的内容:

如何在Python中进行Elasticsearch操作?

暂时不用管mappings是什么,我们会在后面讨论它。它实际上做的只是创建一个你自己的Schema文档。creation_date是不言自明的。number_of_shards表示将保留此索引数据的分区数量。将整个数据保存在单个磁盘上毫无意义。如果你运行的是多个Elastic节点的集群,那么整个数据都会被分割。简而言之,如果有5个分片,则整个数据可以在5个分片中使用,并且ElasticSearch集群可以服务来自其任何节点的请求。

副本讨论的是你的数据的镜像。如果你熟悉主从概念,那么这对你来说不应该是新事物。你可以了解更多关于基本ES概念。

创建索引的cURL版本是单线程的。

如何在Python中进行Elasticsearch操作?

你也可以一次执行索引创建和记录插入任务。你所要做的就是以JSON格式传递你的记录。你可以在PostMan中使用下面的东西:

如何在Python中进行Elasticsearch操作?

请确保你将Content-Type设置为application/json.

一个名为company的索引会被创建如果它原本不存在的话,然后在这里创建一个名为employees的新类型。Type实际上是RDBMS中的表的ES版本。

上述请求将输出以下JSON结构:

如何在Python中进行Elasticsearch操作?

你传递/1作为你的记录的ID,但这是不必要的。它所做的只是将_id字段设置为值1,然后数据以JSON格式传递,最终作为新记录或文档插入。

如何在Python中进行Elasticsearch操作?

你可以看到元和实际记录。

cURL版本将是:

如何在Python中进行Elasticsearch操作?

如果你想更新该记录怎么办?这很简单。你所要做的就是改变你的JSON记录。如下所示:

如何在Python中进行Elasticsearch操作?

它会生成以下输出:

如何在Python中进行Elasticsearch操作?

注意现在_result字段设置为updated而不是created。

当然,你也可以删除某些记录。

如何在Python中进行Elasticsearch操作?

如果你疯了,或者你的女朋友甩了你,你可以通过从命令行运行curl -XDELETE localhost:9200/_all来毁掉整个世界。

让我们做一些基本的搜索。 它将搜索employees类型下的所有字段并返回相关记录。

如何在Python中进行Elasticsearch操作?

max_score字段表示记录的相关性,即记录的最高分数。如果有多个记录,那么它会是一个不同的数字。

你还可以通过传递字段名称将搜索条件限制到某个字段。

我刚刚介绍了基本的例子。ES可以做很多事情,但是希望你自己通过阅读文档来进一步探索它,而我将继续介绍在Python中使用ES。

在Python中使用ElasticSearch

说实话,ES的REST API已经足够好了,可以让你使用requests库执行所有任务。不过,你可以使用ElasticSearch的Python库专注于主要任务,而不必担心如何创建请求。

通过pip安装它,然后你可以在你的Python程序中访问它。

如何在Python中进行Elasticsearch操作?

为确保它的安装正确,请从命令行运行以下基本片段:

如何在Python中进行Elasticsearch操作?

网页搜索和Elasticsearch

我们来讨论一下使用Elasticsearch的一些实际用例。我们的目标是访问在线食谱并将它们存储在Elasticsearch中以用于搜索和分析。我们将首先从Allrecipes中获取数据并将其存储在ES中。我们还将创建一个严格的模式或映射,以便我们确保数据以正确的格式和类型进行索引。最后只要列出沙拉食谱的清单。我们开始吧!

获取数据

如何在Python中进行Elasticsearch操作?

如何在Python中进行Elasticsearch操作?

所以这是获取数据的基本程序。因为我们需要JSON格式的数据,所以我对其进行了相应的转换。

创建索引

我们得到了所需的数据,接下来我们必须存储它。我们要做的第一件事就是创建一个索引。让我们将其命名为recipes。 该类型将被称为salads。我要做的另一件事是创建我们的文档结构的映射。

在我们创建索引之前,我们必须连接ElasticSearch服务器。

如何在Python中进行Elasticsearch操作?

如何在Python中进行Elasticsearch操作?

这里有很多要说的事。首先,我们传递了一个包含整个文档结构映射的配置变量。映射是模式这一术语在Elastic的版本。就像我们在表格中设置特定的字段数据类型一样,我们在这里做类似的事情。检查文档,它涵盖的不仅仅是这些。所有字段都是文本类型,但是calories类型为Integer。

接下来,我确保索引不存在,然后创建它。参数ignore = 400在检查后不再需要,但存在性证明是必要的,因为这可以防止错误地覆盖现有索引。虽然这很危险。这就像覆盖数据库。

如果索引成功创建,你可以验证它,它会输出如下所示的内容:

如何在Python中进行Elasticsearch操作?

通过传递dynamic:strict我们使Elasticsearch严格检查任何传入的文档。在这里,salads实际上是文档类型。Type实际上是Elasticsearch对RDBMS表的回答。

记录索引

下一步是存储实际的数据或文档。

如何在Python中进行Elasticsearch操作?

运行它,你会看到:

如何在Python中进行Elasticsearch操作?

你能猜到为什么会这样吗?由于我们没有在我们的映射中设置ingredients,因此ES不允许我们存储包含ingredients字段的文档。现在你知道事先分配映射的优势了。你可以通过这样做避免破坏数据。现在,让我们稍微修改一下映射,现在看起来如下所示:

如何在Python中进行Elasticsearch操作?

我们添加nested类型的ingrdients,然后分配内部字段的数据类型,即在我们的案例中的text。

nested数据类型允许设置嵌套的JSON对象的类型。再次运行它,你将看到以下输出:

如何在Python中进行Elasticsearch操作?

由于你根本没有传递_id,因此ES本身为存储的文档分配了一个动态ID。 我使用Chrome,借助名为ElasticSearch Toolbox的工具使用ES数据查看器来查看数据。

如何在Python中进行Elasticsearch操作?

在我们继续之前,让我们在calories字段中发送一个字符串,看看它是如何发生的。请记住,我们已将其设置为整数。 在编制索引时出现以下错误:

如何在Python中进行Elasticsearch操作?

所以现在你知道为文档分配一个映射的好处了。如果你不这样做,它仍然会工作,因为Elasticsearch将在运行时分配它自己的映射。

查询记录

现在,记录被编入索引,是时候根据我们的需要查询它们了。我将创建一个名为search()的函数,它将显示我们的查询结果。

如何在Python中进行Elasticsearch操作?

这是非常基本的。 你在其中传递索引和搜索条件。让我们尝试一些查询。

如何在Python中进行Elasticsearch操作?

如何在Python中进行Elasticsearch操作?

如何在Python中进行Elasticsearch操作?

如果你想获得卡路里超过20的记录怎么办?

如何在Python中进行Elasticsearch操作?

你也可以指定想要返回的列或字段。上述查询将返回卡路里大于20的所有记录。此外,它将仅在_source下显示title字段。

结论

Elasticsearch是一个功能强大的工具,它可以提供强大的功能帮助你来返回最准确的结果集,从而使你现有的或新的应用程序可搜索。我刚刚讲述了它的要点,你可以继续阅读文档并熟悉这个强大的工具。尤其是模糊搜索功能非常棒。如果我有机会,我会在即将发布的帖子中介绍Query DSL。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2902

    浏览量

    102867
  • 引擎
    +关注

    关注

    1

    文章

    343

    浏览量

    22259
  • python
    +关注

    关注

    51

    文章

    4657

    浏览量

    83377

原文标题:在Python中使用Elasticsearch

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    通过Bifaces生成的elf文件,如何在HighTec集成的UDE中进行仿真?

    通过Bifaces生成的elf文件,如何在HighTec集成的UDE中进行仿真?
    发表于 02-18 07:51

    何在ADS中进行EM仿真

    先生,我想对90度支线耦合器进行EM仿真,我不知道如何在ADS中进行EM仿真。请有人知道EM模拟的PDF帮助文档。你告诉我了吗 以上来自于谷歌翻译 以下为原文Sir, I want to do
    发表于 12-27 16:28

    在linux上安装部署ElasticSearch的详细操作

    (1)、下载安装包访问elasticSearch官网地址 https://www.elastic.co/下载指定版本的安装包:elasticsearch-6.1.1.tar.gz(2)、规划安装目录/export/servers/(3)、上传安装包到指定目录
    发表于 07-12 06:10

    docker安装Elasticsearch操作指南

    docker安装Elasticsearch以及分词器
    发表于 09-16 16:53

    何在Arduino中进行编程

    接上篇关于Arduino基础环境配置、界面介绍和C语言基础,这一篇的内容为具体如何在Arduino中进行编程。在VSCode上配置Arduino什么是VSCodeVSCode,即Visual
    发表于 07-13 09:07

    何在ROBOGUIDE环境中进行离线编程和仿真?

    何在ROBOGUIDE环境中进行离线编程和仿真?如何学习FANUC Robot编程?
    发表于 09-18 06:33

    何在STM32CubeMX中进行串口通信的配置?

    何在STM32CubeMX中进行串口通信的配置?
    发表于 12-13 06:27

    何在STM32CubeMX中进行串口通信的配置?

    何在STM32CubeMX中进行串口通信的配置?
    发表于 02-18 07:34

    何在android中进行驱动呢

    何在android中进行驱动呢?并输出dev和sys中的界面用程序调用呢?
    发表于 03-02 09:53

    请问一下如何在uboot中进行RK开机动画播放呢

    请问一下如何在uboot中进行RK开机动画播放呢?
    发表于 03-04 07:47

    何在环境安装使用Python操作word

    ,也有少许情况会用到读操作,在本次教程中都会进行讲解,本次课程主要用到以下4个库,请大家提前安装。 升级pip(便于安装最新库) python -m pip install -U pip
    的头像 发表于 09-05 15:13 1883次阅读
    如<b class='flag-5'>何在</b>环境安装使用<b class='flag-5'>Python</b><b class='flag-5'>操作</b>word

    Python中进程的操作

    进程是计算机中的程序关于某数据集合的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
    的头像 发表于 08-19 09:45 1001次阅读
    <b class='flag-5'>Python</b><b class='flag-5'>中进</b>程的<b class='flag-5'>操作</b>

    Python对txt进行读写操作

    Python对txt进行读写操作
    的头像 发表于 01-11 15:16 592次阅读

    Python 更新 Elasticsearch 的几种方法

    今天总结一下通过 Python 更新 Elasticsearch 数据的几个方法 Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。它被用作
    的头像 发表于 11-01 10:11 319次阅读
    <b class='flag-5'>Python</b> 更新 <b class='flag-5'>Elasticsearch</b> 的几种方法

    何在Python中使用Scapy进行抓包操作

    文章将介绍如何使用 Python进行简单的抓包操作。 2. Python 中的抓包库 在 Python 中,有很多优秀的抓包库,例如 S
    的头像 发表于 11-01 14:47 1856次阅读