《深入理解Elasticsearch(原书第2版)》一2.4.1 过滤及查询相关性

2.4.1 过滤及查询相关性

普通查询和过滤的第一个差异在于它们对文档打分的影响。让我们举例对比一下查询和过滤的输出。首先执行如下查询:

这个查询的结果如下:

这个查询没有任何特异之处。Elasticsearch将返回所有在title字段中包含“front”的文档。需要指出的是,每个和查询匹配的文档都会被计算得分,其中得分最高的一组文档被作为查询结果返回给用户。在本例中,该查询返回了一篇得分为0.11506981的文档。以上这些就是查询的一般行为。
接着我们来对比一下查询和过滤。在一个同时包含查询和过滤的例子中,我们将加入一段代码片段,限制返回文档只能有一个副本(copies字段取值为1)。不使用过滤的查询方式如下:

Elasticsearch返回的查询结果和上一个查询非常相似:

上面这段查询代码中的bool查询由两个term查询构成,每个结果文档都需要同时匹配这两个term查询。这个查询返回了和上一查询相同的文档,不过文档得分变成了0.98976034。这和我们读完2.1节后的期望一致:每个词项都会影响得分。
接下来我们来看看使用过滤的查询方式,在titile字段匹配“front”的查询,同时针对copies字段进行过滤。

现在,我们构造好了一个term查询,同时还添加了一个term过滤器。从下面的返回代码中可以看出,输出的文档和不使用过滤时一样,不过文档得分发生了变化。

这个文档的得分为0.11506981,这和本节最开始的查询结果一模一样。通过得分对比我们得出结论:过滤不影响文档得分。
 旧版Elasticsearch使用“filter”而不是上述代码中的“post_filter”来标识查询语句中的过滤片段。在1.x版本中,这两种标记方式都可以正常使用,不过请注意,“filter”方式可能将在之后的版本中停用。
一般来说,查询和过滤在工作过程中存在一个主要的差异。过滤的唯一目的是用特定筛选条件来缩小结果范围。而查询不仅缩小结果范围,还会影响文档的得分,这一点在强调文档相关性时非常重要,不过需要付出一定的代价:需要额外的CPU消耗来计算文档得分。当然,这不是查询和过滤的唯一区别。本节剩余部分将着重探讨过滤器的工作原理和Elasticsearch提供的不同过滤方式之间的异同。

时间: 2025-01-28 00:12:40

《深入理解Elasticsearch(原书第2版)》一2.4.1 过滤及查询相关性的相关文章

《深入理解Elasticsearch(原书第2版)》一第2章查询DSL进阶2.1 Apache Lucene默认评分公式解释

第2章 查询DSL进阶 在上一章,我们了解了什么是Apache Lucene,它的整体架构,以及文本分析过程是如何完成的.之后,我们还介绍了Lucene的查询语言及其用法.除此之外,我们也讨论了Elasticsearch,讨论了它的架构,以及一些核心概念.在本章,我们将深入研究Elasticsearch的查询DSL(Domain Specific Language).在了解那些高级查询之前,我们将先了解Lucene评分公式的工作原理.到本章结束,将涵盖以下内容: Lucene默认评分公式是如何工

《深入理解Elasticsearch(原书第2版)》一2.2 查询改写

2.2 查询改写 之前我们探讨了评分机制,这些知识非常珍贵,特别是当你尝试改进查询相关性时.我们还认为,在对查询进行调试时,也很有必要搞清楚查询是如何执行的.因此我们决定在本节介绍一下查询改写是如何工作的,为什么需要查询改写,以及我们应该如何控制它. 如果你之前使用过诸如前缀查询或通配符查询之类的查询类型,那么你会了解这些都是基于多词项的查询,它们都涉及查询改写.Elasticsearch使用查询改写是出于对性能的考虑.从Lucene的角度来看,所谓的查询改写操作,就是把费时的原始查询类型实例改

《深入理解Elasticsearch(原书第2版)》一2.3 查询模板

2.3 查询模板 在应用程序迭代的同时,它的运行环境很可能会越来越复杂.在你所处的组织中,很可能同一个应用程序的不同部分分别有专人负责,比如说,至少有一个前端工程师和一个负责数据库层的后端工程师.将应用程序划分为几个模块分别开发的方式非常便捷高效,它能够让开发人员针对程序的不同部分并行进行开发工作,而无需在开发者之间和开发小组内部时刻同步代码.当然,你正在阅读的这本书不是关于项目管理的,而是聚焦于搜索的,因此让我们回到正题上.有时候,我们可以整理出程序使用的所有查询语句交给搜索引擎工程师,让他们

《深入理解Elasticsearch(原书第2版)》——2.4 过滤器的使用及作用原理

2.4 过滤器的使用及作用原理 接下来,我们一起认识一下Elasticsearch提供的过滤功能.初看起来,过滤好像一个多余的功能,因为几乎每个过滤器在Elasticsearch查询DSL中都以一个与查询代码极其相似的方式呈现的.不过,这些过滤器一定有其独到之处,不然它们就不会在查询性能优化时被广泛使用和推荐了.本节我们将着重探讨为什么过滤器如此重要,它们的工作原理,以及Elasticsearch都提供了哪些过滤器给我们使用. 2.4.1 过滤及查询相关性 普通查询和过滤的第一个差异在于它们对文

《深入理解Elasticsearch(原书第2版)》一2.4 过滤器的使用及作用原理

2.4 过滤器的使用及作用原理 接下来,我们一起认识一下Elasticsearch提供的过滤功能.初看起来,过滤好像一个多余的功能,因为几乎每个过滤器在Elasticsearch查询DSL中都以一个与查询代码极其相似的方式呈现的.不过,这些过滤器一定有其独到之处,不然它们就不会在查询性能优化时被广泛使用和推荐了.本节我们将着重探讨为什么过滤器如此重要,它们的工作原理,以及Elasticsearch都提供了哪些过滤器给我们使用.2.4.1 过滤及查询相关性 普通查询和过滤的第一个差异在于它们对文档

《深入理解Elasticsearch(原书第2版)》一导读

前 言 欢迎来到Elasticsearch的世界并阅读本书第2版.通过阅读本书,我们将带领你接触与Elasticsearch紧密相关的各种话题.请注意,本书不是为初学者写的.笔者将本书作为<Elasticsearch Server, Second Edition>的续作和姊妹篇.相对于<Elasticsearch Server>,本书涵盖了很多新知识,不过你偶尔也可以在本书中发现一些引自<Elasticsearch Server>的内容. 本书将探讨与Elasticse

《深入理解Elasticsearch(原书第2版)》——导读

前 言 欢迎来到Elasticsearch的世界并阅读本书第2版.通过阅读本书,我们将带领你接触与Elasticsearch紧密相关的各种话题.请注意,本书不是为初学者写的.笔者将本书作为<Elasticsearch Server, Second Edition>的续作和姊妹篇.相对于<Elasticsearch Server>,本书涵盖了很多新知识,不过你偶尔也可以在本书中发现一些引自<Elasticsearch Server>的内容. 本书将探讨与Elasticse

《机器学习与R语言(原书第2版)》一2.3 探索和理解数据

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第2章,第2.3节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 2.3 探索和理解数据 在收集数据并把它们载入R数据结构以后,机器学习的下一个步骤是仔细检查数据.在这个步骤中,你将开始探索数据的特征和案例,并且找到数据的独特之处.你对数据的理解越深刻,你将会更好地让机器学习模型匹配你的学习问题. 理解数据探索的最好方法就是通过例子.在

《机器学习与R语言(原书第2版)》一 第2章 数据的管理和理解

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第2章,第2.1节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 第2章 数据的管理和理解 任何机器学习项目初期的核心部分都是与管理和理解所收集的数据有关的.尽管你可能发现这些工作不像建立和部署模型那样令人有成就感(建立和部署模型阶段就开始看到了劳动的成果),但是忽视这些重要的准备工作是不明智的.任何学习算法的好坏取决于输入数据的好坏.