我的编程空间,编程开发者的网络收藏夹
学习永远不晚

在Python中使用Elasticsea

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

在Python中使用Elasticsea

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

什么是ElasticSearch?

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

ElasticSearch用例

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

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

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

设置和运行

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

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

基本示例

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

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

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

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

640?wx_fmt=png

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

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

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

640?wx_fmt=png

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

640?wx_fmt=png

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

cURL版本将是:

640?wx_fmt=png

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

640?wx_fmt=png

它会生成以下输出:

640?wx_fmt=png

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

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

640?wx_fmt=png

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

让我们做一些基本的搜索。 如果运行http://localhost:9200/company/employees/_search?q=adnan,它将搜索employees类型下的所有字段并返回相关记录。

640?wx_fmt=png

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程序中访问它。

640?wx_fmt=png

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

640?wx_fmt=png

网页搜索和Elasticsearch

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

获取数据

640?wx_fmt=png

640?wx_fmt=png

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

创建索引

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

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

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

640?wx_fmt=png

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

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

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

640?wx_fmt=png

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

记录索引

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

640?wx_fmt=png

运行它,你会看到:

640?wx_fmt=png

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

640?wx_fmt=png

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

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

查询记录

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

640?wx_fmt=png

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

640?wx_fmt=png上述查询将返回卡路里等于102的所有记录。在我们的情况下,输出将是:

640?wx_fmt=png

640?wx_fmt=png

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

640?wx_fmt=png

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

结论

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

∞∞∞∞∞



640?wx_fmt=jpeg&wx_lazy=1

IT派 - {技术青年圈}持续关注互联网、区块链、人工智能领域640?wx_fmt=jpeg&wx_lazy=1



公众号回复“Python”,

邀你加入{ IT派Python技术群 } 


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

在Python中使用Elasticsea

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

下载Word文档

猜你喜欢

在Python中使用Elasticsea

在这篇文章中,我将讨论Elasticsearch以及如何将其整合到不同的Python应用程序中。什么是ElasticSearch?ElasticSearch(ES)是一个建立在Apache Lucene之上的高度可用的分布式开源搜索引擎。它
2023-01-31

在Python中使用QuantLib

Quantlib简介相比TA-Lib在技术分析领域的地位,QuantLib在金融工程领域的地位可以说有过之而无不及。参考其官方网站,QuantLib中包含的的模块如下(其中个人感觉国内比较有用的添加了中文注释):Currencies and
2023-01-31

在 Python 中使用 Elastic

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

在Python中使用MySQL-

PyMySQL的使用安装sudo pip3 install pymysql基本使用from pymysql import connect# 1.创建链接coon = connect()""" * 参数host:连接的mysql主机,如果本机是"localhos
2015-07-26

在Python中使用regionprops

在Python中,可以使用`regionprops`函数从二进制图像的连通区域中提取属性。下面是一个示例代码:```pythonimport matplotlib.pyplot as pltfrom skimage.measure impo
2023-09-26

在Python中使用protocol b

本教程提供了一个Python程序员使用protocol buffers的基本的入门教程。通过创建一个简单的示例应用程序,它向您展示了如何*在一个.proto文件中定义Message的格式。*使用protocol buffer compile
2023-01-31

怎么在Python中使用中文

这篇文章主要讲解了“怎么在Python中使用中文”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Python中使用中文”吧!在Python中使用中文 它有两种默认的字符串:str和uni
2023-06-17

linspace如何在Python中使用

linspace如何在Python中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。linspace生成有序列表,重点在数据范围与数据个数上linspace(
2023-06-14

怎么在Python中使用OpenCV

这篇文章给大家介绍怎么在Python中使用OpenCV,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。OpenCVOpenCV是计算机视觉中最受欢迎的库,最初由intel使用C和C ++进行开发的,现在也可以在pytho
2023-06-14

popitem怎么在python中使用

popitem怎么在python中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、说明用于返回并删除字典中的一个键值对,一般删除字典末尾的键值对。2、语法dict.p
2023-06-15

如何在python中使用pygame

如何在python中使用pygame?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、安装在 cmd 命令中输入: pip install pygame即可安装成功了二、第一个
2023-06-15

如何在Python中使用EasyGUI

这篇文章给大家介绍如何在Python中使用EasyGUI,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于
2023-06-14

如何在Python中使用类

如何在Python中使用类?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、类的定义和使用在C++中,类是“结构体”的衍生。在Python中,类作为一个完全独立
2023-06-15

如何在Python中使用DataFrame

如何在Python中使用DataFrame?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、方法说明df.values:返回一个 ndarray 类型的对象,包涵 DataFr
2023-06-15

怎么在Python中使用Appium

怎么在Python中使用Appium?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python勾选Add Python x.x to PATH(没有勾选的安装成功后可手动在
2023-06-14

sympy如何在python中使用

sympy如何在python中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Pyth
2023-06-14

deque怎么在Python中使用

这篇文章给大家介绍deque怎么在Python中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写
2023-06-14

geopy怎么在python中使用

geopy怎么在python中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录