iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >在 Python 中使用 Elastic
  • 550
分享到

在 Python 中使用 Elastic

PythonElastic 2023-01-31 06:01:42 550人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

在这篇文章中,我将讨论 elasticsearch 以及如何将其整合到不同的 python 应用程序中。 什么是 ElasticSearch? ElasticSearch(ES)是一个建立在 Apache Lucene 之上的高度可用的分布

在这篇文章中,我将讨论 elasticsearch 以及如何将其整合到不同的 python 应用程序中。

什么是 ElasticSearch?

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

ElasticSearch 用例

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

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

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

设置和运行

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

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

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

但是,由于眼见为实,可以在浏览器中访问 URLHttp://localhost:9200 或者通过 cURL 查看类似于这样的欢迎界面以便你知道确实成功安装了:
在 Python 中使用 Elasticsearch

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

基本示例

你要做的第一件事就是创建索引。一切都以索引形式存储。RDBMS 概念中索引相当于一个数据库,因此不要将它与你在 RDBMS 中学习的典型索引概念混淆。使用 PostMan 来运行 REST API。如果它成功运行,你会看到如下所示的回应:
在 Python 中使用 Elasticsearch

所以我们使用 company 为名创建了一个数据库。换句话说,我们创建了一个名为“company”的索引。如果你从浏览器访问 http://localhost:9200/company,
那么你将看到如下所示的内容:
在 Python 中使用 Elasticsearch

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

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

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

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

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

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

上述请求将输出以下 JSON 结构:
在 Python 中使用 Elasticsearch

你传递 /1 作为你的记录的 ID,但这是不必要的。它所做的只是将 _id 字段设置为值 1,然后数据以 JSON 格式传递,最终作为新记录或文档插入。如果你从浏览器访问 http://localhost:9200/company/employees/1,
你会看到如下所示的内容:

你可以看到元和实际记录。 如果你想,可以将请求更改为http://localhost:9200/company/employees/1/_source,
那么就会仅输出 JSON 结构记录。

cURL 版本将是:

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

它会生成以下输出:
在 Python 中使用 Elasticsearch

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

当然,你也可以删除某些记录。
在 Python 中使用 Elasticsearch

如果你疯了,或者你的女朋友甩了你,你可以通过从命令行运行curl -XDELETE localhost:9200/_all来毁掉整个世界。让我们做一些基本的搜索。 如果运行http://localhost:9200/company/employees/_search?q=adnan,它将搜索 employees 类型下的所有字段并返回相关记录。
在 Python 中使用 Elasticsearch

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

你还可以通过传递字段名称将搜索条件限制到某个字段。因此,http://localhost:9200/company/employees/_search?q=name:Adnan
将仅在文档的名称字段中进行搜索。它实际上等同于 SQL 中的 SELECT * from table where name="Adnan"。

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

在 Python 中使用 ElasticSearch

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

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

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

网页搜索和 Elasticsearch

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

获取数据

在 Python 中使用 Elasticsearch
在 Python 中使用 Elasticsearch

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

创建索引

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

在我们创建索引之前,我们必须连接 ElasticSearch 服务器
在 Python 中使用 Elasticsearch

_es.ping() 会 ping 服务器,并在连接后返回 True。我花了一段时间才弄清楚如何捕获堆栈跟踪,发现它只是被记录下来!
在 Python 中使用 Elasticsearch

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

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

如果索引成功创建,你可以通过访问 http://localhost:9200/recipes/_mappings 来验证它,它会输出如下所示的内容:
在 Python 中使用 Elasticsearch

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

记录索引

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

运行它,你会看到:

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

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

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

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

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

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

查询记录

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

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

上述查询将返回卡路里等于 102 的所有记录。在我们的情况下,输出将是:
在 Python 中使用 Elasticsearch

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

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

结论

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

英文原文:http://blog.adnansiddiqi.me/getting-started-with-elasticsearch-in-python/

译者:β

Python 技术交流群:238757010

51Reboot Python 实战班第19期火热招生中

详情扫码咨询:
在 Python 中使用 Elasticsearch

--结束END--

本文标题: 在 Python 中使用 Elastic

本文链接: https://www.lsjlt.com/news/190454.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在 Python 中使用 Elastic
    在这篇文章中,我将讨论 Elasticsearch 以及如何将其整合到不同的 Python 应用程序中。 什么是 ElasticSearch? ElasticSearch(ES)是一个建立在 Apache Lucene 之上的高度可用的分布...
    99+
    2023-01-31
    Python Elastic
  • 怎么在Security中安装 Elastic SIEM 与 EDR
    这期内容当中小编将会给大家带来有关怎么在Security中安装 Elastic SIEM 与 EDR,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。安装 Elasticsearch首先安装 transpor...
    99+
    2023-06-06
  • 【Python】在python中使用MySQL
    文章目录 0 前言1 参考链接2 数据库概述3 MySQL配置3.1 下载及安装3.1.1 其他安装方式 3.2 环境配置3.3 基本使用3.4 问题解决3.4.1 如何重置密码3.4....
    99+
    2023-09-10
    mysql python 数据库 pymysql
  • vue中使用gantt-elastic实现可拖拽甘特图的示例代码
    官方例子效果图: 可以横向以及纵向鼠标拖拽表格滑动。可以手动调整列宽等功能 1、安装gantt-elastic npm install --save gantt-elastic 2...
    99+
    2022-11-13
  • Java Elastic-Job分布式定时任务使用方法介绍
    目录1 事件追踪1.1 修改Elastic-Job配置类1.2 启动项目2 运维2.1 搭建2.2 配置及使用1 配置注册中心地址2 配置事件追踪数据源3 dump命令1 事件追踪 ...
    99+
    2023-01-16
    Java Elastic-Job Java分布式定时任务
  • .NET程序性能监控系统Elastic AMP的使用方法
    目录什么是Elastic AMP工作原理代码演示1.新增Web项目2.新增Nuget包3.配置HttpModule4.配置Agent5.启动网站Elastic APM核心模块1.Tr...
    99+
    2022-11-12
  • 在Python中使用regionprops
    在Python中,可以使用`regionprops`函数从二进制图像的连通区域中提取属性。下面是一个示例代码:```pythonim...
    99+
    2023-09-26
    Python
  • 在Python中使用MySQL-
    PyMySQL的使用 安装 sudo pip3 install pymysql 基本使用 from pymysql import connect # 1.创建链接 coon = connect() """ * 参数host:连接...
    99+
    2015-07-26
    在Python中使用MySQL-
  • 在Python中使用QuantLib
    Quantlib简介 相比TA-Lib在技术分析领域的地位,QuantLib在金融工程领域的地位可以说有过之而无不及。 参考其官方网站,QuantLib中包含的的模块如下(其中个人感觉国内比较有用的添加了中文注释): Curre...
    99+
    2023-01-31
    Python QuantLib
  • 在Python中使用Elasticsea
    在这篇文章中,我将讨论Elasticsearch以及如何将其整合到不同的Python应用程序中。什么是ElasticSearch?ElasticSearch(ES)是一个建立在Apache Lucene之上的高度可用的分布式开源搜索引...
    99+
    2023-01-31
    Python Elasticsea
  • 在Python中使用protocol b
    本教程提供了一个Python程序员使用protocol buffers的基本的入门教程。通过创建一个简单的示例应用程序,它向您展示了如何 *在一个.proto文件中定义Message的格式。 *使用protocol buffer c...
    99+
    2023-01-31
    Python protocol
  • 怎么在Python中使用中文
    这篇文章主要讲解了“怎么在Python中使用中文”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Python中使用中文”吧!在Python中使用中文 它有两种默认的字符串:str和uni...
    99+
    2023-06-17
  • 如何在Python中使用DataFrame
    如何在Python中使用DataFrame?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、方法说明df.values:返回一个 ndarray 类型的对象,包涵 DataFr...
    99+
    2023-06-15
  • Tkinter怎么在python中使用
    这期内容当中小编将会给大家带来有关Tkinter怎么在python中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。from tkinter import *from&nb...
    99+
    2023-06-14
  • 怎么在Python中使用Appium
    怎么在Python中使用Appium?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python勾选Add Python x.x to PATH(没有勾选的安装成功后可手动在...
    99+
    2023-06-14
  • sympy如何在python中使用
    sympy如何在python中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Pyth...
    99+
    2023-06-14
  • deque怎么在Python中使用
    这篇文章给大家介绍deque怎么在Python中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写...
    99+
    2023-06-14
  • 如何在python中使用堆
    这篇文章将为大家详细讲解有关如何在python中使用堆,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、l...
    99+
    2023-06-14
  • selectors怎么在python中使用
    本篇文章给大家分享的是有关selectors怎么在python中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python的数据类型有哪些python的数据类型:1. 数字...
    99+
    2023-06-14
  • **kwargs怎么在python中使用
    **kwargs怎么在python中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python有哪些常用库python常用的库:1.requesuts;2....
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作