《深入理解Elasticsearch(原书第2版)》一2.4.2 过滤器的工作原理

2.4.2 过滤器的工作原理

前一小节我们已经提到,过滤不影响所匹配文档的得分。基于两个原因,这一点非常重要。第1个原因是性能。针对索引中的一组文档进行过滤操作是非常简单高效的。过滤器持有的关于文档的唯一重要信息是该文档是否匹配这个过滤器—仅仅一个标记而已。
过滤器通过返回一个被称为DocIdSet(org.apache.lucene.search.DocIdSet)的数据结构来提供这类匹配信息。这个数据结构的用途是为索引段提供经过滤器过滤后的数据。它可以使用Bits接口(org.apache.lucene.util.Bits)的有关实现。Bits接口可以随机访问过滤器中的文档信息(主要是检查索引段中的某个文档是否和该过滤器匹配)。Bits的数据结构非常高效,因为CPU可以使用位运算来完成过滤(有一个精巧的CPU部件用来处理这类运算,详情参考环形移位的维基百科http://en.wikipedia.org/wiki/Circular_shift)。DocIdSet还针对内部文档标识的有序集合提供了一个DocIdSetIterator迭代器给我们使用。
下表展示了这些类是如何使用Bits进行工作的。

Lucene(以及Elasticsearch)提供了DocIdSet的多种实现来应对不同场景。不同实现的性能各不相同。不过,选择合适的实现是Lucene和Elasticsearch的职责,我们一般不需要关心这一点,除非我们要针对它们进行功能扩展。
 不是所有的过滤器都使用Bits结构,比如数值区间过滤器、脚本过滤器、以及基于地理位置的一组过滤器。这些特殊的过滤器选择把数据记录在字段缓存里,然后再遍历所需处理的文档集合,逐个进行过滤操作。这意味着过滤器链条中的下一个过滤器只能获取到匹配前一个过滤器的文档集合。因此,可以针对这些过滤器进行优化,比如把最重的(译者注:匹配文档最多的,或者性能最差的)过滤器放到过滤器链的最后去执行。
布尔过滤器和与或非过滤器
我们在《Elasticsearch Server,Second Edition》一书中探讨了过滤器的有关知识,在这里只需要提醒读者注意一点:与或非过滤器不使用Bits,而布尔过滤器使用了Bits。因此,请尽可能使用布尔过滤器。与或非过滤器一般在需要脚本过滤、地理位置过滤和数值区间过滤时使用。还需要注意的是,如果把任何不使用Bits的过滤器嵌套在与或非过滤器中,它们同样不会用到Bits。
一般来讲,在组合使用多个处理器时,如果其中包含不使用Bits的处理器,则需要使用与或非处理器来对它们进行组合。而如果要组合的所有处理器都使用Bits,则可以选择使用布尔过滤器来组合它们。

时间: 2024-08-03 10:12:14

《深入理解Elasticsearch(原书第2版)》一2.4.2 过滤器的工作原理的相关文章

《深入理解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章 数据的管理和理解 任何机器学习项目初期的核心部分都是与管理和理解所收集的数据有关的.尽管你可能发现这些工作不像建立和部署模型那样令人有成就感(建立和部署模型阶段就开始看到了劳动的成果),但是忽视这些重要的准备工作是不明智的.任何学习算法的好坏取决于输入数据的好坏.

Java核心技术 卷Ⅰ 基础知识(原书第10版)

Java核心技术系列 Java核心技术 卷Ⅰ 基础知识 (原书第10版) Core Java Volume I-Fundamentals (10th Edition) [美] 凯S.霍斯特曼(Cay S. Horstmann) 著 周立新 陈 波 叶乃文 邝劲筠 杜永萍 译 图书在版编目(CIP)数据 Java核心技术 卷Ⅰ 基础知识(原书第10版) / (美)凯S. 霍斯特曼(Cay S. Horstmann)著:周立新等译. -北京:机械工业出版社,2016.8 (Java核心技术系列) 书

ROS机器人程序设计(原书第2版).

机器人设计与制作系列 ROS机器人程序设计 (原书第2版) Learning ROS for Robotics Programming,Second Edition 恩里克·费尔南德斯(Enrique Fernández) 路易斯·桑切斯·克雷斯波(Luis Sánchez Crespo) 阿尼尔·马哈塔尼(Anil Mahtani) 亚伦·马丁内斯(Aaron Martinez) 著 刘锦涛 张瑞雷 等译 图书在版编目(CIP)数据 ROS机器人程序设计(原书第2版) / (西)恩里克·费尔南

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一导读

前 言 致读者 本书是按照Java SE 8完全更新后的<Java核心技术 卷Ⅱ 高级特性(原书第10版)>.卷Ⅰ主要介绍了Java语言的一些关键特性:而本卷主要介绍编程人员进行专业软件开发时需要了解的高级主题.因此,与本书卷Ⅰ和之前的版本一样,我们仍将本书定位于用Java技术进行实际项目开发的编程人员. 编写任何一本书籍都难免会有一些错误或不准确的地方.我们非常乐意听到读者的意见.当然,我们更希望对本书问题的报告只听到一次.为此,我们创建了一个FAQ.bug修正以及应急方案的网站http:/