当前位置: 首页 > 网络应用技术

[2022] Cui Qingcai Python3爬网教程 - 弹性搜索存储,可方便地检索

时间:2023-03-08 16:04:20 网络应用技术

  ?这是爬行动物列的原始“ 16”

  如果要检查数据,您将不可避免地搜索,并且搜索无法与搜索引擎分开。Baidu和Google非常大且复杂的搜索引擎,它们几乎索引了所有网页和数据在Internet上打开。,对于我们自己的业务数据,无需使用此类复杂技术。如果我们想实施搜索引擎,Elasticsearch是促进存储和检索的最佳选择。它是一个完整的文本搜索引擎,可以快速快速存储,搜索和分析大量数据。

  因此,如果我们将攀登数据存储到Elasticsearch中,则检索将非常方便。

  Elasticsearch是一款开源搜索引擎,基于完整的搜索引擎库Apache Lucene?。

  那么Lucene是什么?Lucene可能是一个具有最先进,表现最高和完整功能的搜索引擎功能的图书馆,但它只是一个库。如果您想使用Lucene,我们需要编写Java并引用Lucene Package,我们需要对信息检索有一定程度的了解。

  为了解决这个问题,Elasticsearch诞生了。它使用Lucene进行索引和搜索,但其目标是使全文检索变得简单,这等同于Lucene层。Realize储存和检索。

  因此,Elasticsearch只是Lucene包装的简单版本吗?这是错误的,Elasticsearch不仅是Lucene,而且不仅是完整的文本搜索引擎,也可以准确地描述它:

  简而言之,这是一个非常强大的搜索引擎。Wikipedia,Stack Overflow和GitHub都将其用于搜索,不仅提供了强大的检索功能,而且还提供了强大的存储功能。

  Elasticsearch中有几个基本概念,例如节点,索引,文档等。让我们在下面解释一下。理解这些概念对熟悉Elasticsearch非常有帮助。

  Elasticsearch本质上是一个分布式数据库,允许多个服务器一起工作。每个服务器可以运行多个Elasticsearch实例。

  单个Elasticsearch实例称为节点(节点),一组节点形成群集。

  索引,即索引,Elasticsearch将索引所有字段,然后在处理后,编写反向索引(倒置索引)。查找数据时,直接找到索引。

  因此,Elasticsearch数据管理的顶级单位称为索引,实际上等同于MySQL和MongoDB中的数据库概念。此外,值得注意的是,每个索引的名称(即数据库)必须小写。

  文档,文档。索引中的单个记录称为文档,许多文档构成索引。

  同一索引中的文档不需要相同的结构(模式),但是最好保持相同的内容,因为这有助于提高搜索效率。

  可以支付文件。例如,在天气索引中,它可以由城市群体(北京和上海)或气候组(阳光和雨天)包装。此包称为类型(类型),这是一个虚拟逻辑群体要过滤文档,类似于MySQL中的数据表和MongoDB中的集合。

  不同类型应该具有相似的结构。例如,该字段不能是该组中的字符串,并且另一组的值。这是与关系数据库表的差异。不同的数据(例如)应存储在两个索引而不是一种索引中的两种类型(尽管可以完成)。

  根据计划,Elastic 6.x版本仅允许每个索引包含一种类型,而Elastic 7.X将开始彻底删除它。

  每个文档类似于JSON结构。它包含许多字段。每个字段都有其相应的值。多个字段形成文档。实际上,可以将其与MySQL数据表中的字段进行比较。

  在Elasticsearch中,该文档属于类型(类型),并且这些类型存在于索引中。我们可以为类比传统关系数据库绘制一些简单的比较图:

  以上是Elasticsearch中的一些基本概念。与关系数据库的对比更有帮助理解。

  在开始本节的实际操作之前,请确保已正确安装Elasticsearch。您可以参考安装方法:https://setup.scrape.center/elasticsearch。安装完成后,它可以确保它可以正常运行在本地9200端口上。

  Elasticsearch实际上提供了一系列用于访问和查询操作的Restful API。我们可以使用平等命令或直接调用API进行数据存储和修改操作,但是它不是很方便。因此,在这里,我们直接引入了专门用于连接Elasticsearch的Python库。该名称也称为Elasticsearch。您可以使用PIP3安装它:

  有关更详细的安装方法,请参阅以下内容:https://setup.scrape.center/elasticsearch-py。

  安装后,我们可以开始学习本节。

  让我们首先看一下如何创建索引。在这里,我们创建一个名为:

  在这里,我们首先创建了一个Elasticsearch对象,并且没有设置任何参数。默认情况下,它将连接在本地9200端口运行的Elasticsearch服务。我们还可以设置特定的连接信息,例如:

  我们可以以特定格式构造链接字符串并传递的第一个参数。主机名和端口,由Elasticsearch运行的地址和端口,用户名和密码是可选的,代表连接elasticsearch所需的用户名和密码,还有其他其他其他。参数设置,例如verify_certs表示是否要验证证书的有效性。对于更多参数设置,请参阅:https://elasticsearch-py.readthedocs.io/en/latest/api.html #lasticsearch。

  声明Elasticsearch对象后,我们称为ES索引对象的创建方法以传递索引名称。如果成功创建,将返回以下结果:

  可以看出,返回结果是JSON格式,该字段指示成功的创建操作执行。

  但是目前,如果我们再次执行代码,我们将返回以下结果:

  它提示创建故障,状态代码为400。错误的原因是该索引已经存在。

  请注意,在此处的代码中,我们使用的参数为400,这表明如果结果为400,它将忽略此错误。它不会报告错误,并且该程序不会引发异常。

  如果我们不添加此参数:

  执行再次报告错误:

  执行程序将存在问题。因此,我们需要充分利用参数并消除某些事故,这可以确保程序正常执行而不会中断。

  创建后,我们还可以设置索引的字段映射定义。参考:https://lasticsearch-py.readcs.io/en/latml?#elasticsearch.client.indicesclient.put_mapping。

  删除索引相似,代码如下:

  这也是忽略索引不存在的问题并删除因故障引起的故障的问题。

  如果删除成功,结果将输出:

  如果已删除索引并执行删除,则结果将输出:

  该结果表明当前索引不存在,删除失败。返回的结果也是JSON,状态代码为404,但是由于我们添加参数并忽略了404状态代码,因此程序正常执行,并且该程序是正常执行的,并且输出JSON结果,而不是抛出异常。

  Elasticsearch就像Mongodb一样。插入数据时,您可以直接插入结构化的词典数据,并且可以调用数据。例如,在这里,我们插入新闻数据:

  在这里,我们首先声明新闻数据,包括标题和链接,然后通过调用来插入此数据。调用该方法时,我们通过4个参数。参数代表索引名称,这是数据的唯一标识符ID,代表文档的特定内容。

  运行结果如下:

  结果,中间的字段是数据已成功插入。

  此外,我们实际上可以使用方法插入数据。但是,该方法要求我们指定字段以唯一识别数据,并且该方法不需要它。如果未指定,它将自动生成一个。写作方法如下:

  该方法实际上称为该方法,该方法是该方法的包。

  更新数据也很简单。我们还需要指定数据的数据和内容。

  在这里,我们将日期字段添加到数据中,然后调用该方法。结果如下:

  可以看出,背面结果中的字段是更新成功。此外,我们还注意到一个字段,该字段代表更新的版本号,2表示第二个版本。由于数据之前插入了一次,第一个插入数据是版本1。请参阅上面的操作结果。此更新后,版本编号将变为2。每次更新时,版本编号将添加1。

  此外,还可以完成更新操作方法,写作方法如下:

  可以看出,该方法可以完成插入的两个操作并为我们更新数据。如果不存在数据,则执行插入操作。如果存在,执行更新操作非常方便。

  如果要删除数据,可以调用该方法并指定需要删除的数据。编写如下:

  运行结果如下:

  可以看出,运行结果中的字段是删除成功。它变成3,增加1。

  上述操作是非常简单的操作。普通数据库可以完成,例如MongoDB。看起来没有什么好。Elasticsearch在其异常强大的检索功能方面更为特别。

  对于中文,我们需要安装分段插件。在这里,我们使用elasticsearch-nablesy-ik,其github链接是https://github.com/medcl/elasticsearch-analisy-ik。我们使用elasticsearch-plugin来安装Elasticsearch的另一个命令行工具。这里安装的版本是7.13.2。

  请在此处替换您的Elasticsearch版本号。

  安装后,我们需要重新启动Elasticsearch,然后在启动后,它将自动加载已安装的插头-in。

  首先,我们重新创建一个新索引,并指定需要分割的字段。相应的代码如下:

  在这里,我们首先删除了先前的索引,然后构建了一个新的索引,然后更新了其信息。该细分字段在信息中指定。指定了字段的类型,即使我们使用刚刚安装的中文分割插头,单词分割和搜索细分也是如此。如果未指定,请使用默认的英语单词分段。

  接下来,我们插入一些新数据:

  在这里,我们指定了4个数据,这些数据都包含字段,然后通过该方法将它们插入Elasticsearch中。索引名称是。

  接下来,让我们根据关键字检查相关内容:

  可以看出,此处查询了4个数据:

  可以看出,返回结果将出现在字段中,该字段指示查询结果的数量,代表最大匹配分数。

  此外,我们还可以进行完整的文本检索,这是一个反映Elasticsearch搜索引擎特征的地方:

  在这里,我们使用Elasticsearch支持的DSL语句查询,并使用指定的全文检索。搜索字段是“中国领事馆”。搜索结果如下:

  在这里,我们看到匹配的结果有两个。第一篇文章的分数为1.7796917,第二篇文章的分数为0.81085134。两个匹配数据不包括“梦想”,但其中包含“大学入学考试”一词,因此也被检索了,但是它也已检索到“ Dream”。得分相对较低。

  因此,可以看出,相应的场在检索过程中检索相应的字段,结果将根据检索的检索的相关性进行排序。这是一个基本的搜索引擎原型。

  此外,Elasticsearch还支持许多查询方法,在这里不会一个人描述。简而言之,它的功能非常强大。有关详细信息,请参阅官方文件:https://www.lastic.co/guide/en/elasticsearch/reference/master/qury-dsl.html。

  以上是Elasticsearch的基本介绍,也是使用Python操作Elasticsearch的基本用法,但这只是Elasticsearch的基本功能。它还具有更强大的功能等待我们探索。

  本节中的代码地址:https://github.com/python3webspider/elasticsearchtest。

  非常感谢您的阅读。有关更多令人兴奋的内容,请注意我的公共帐户“编码器”和“ Cui Qingcai丨Quiet”。

  原始:https://juejin.cn/post/70961071490544443534