Elasticsearch 查询过程中的 pre-filter 原理
· 发表评论大家都知道在对索引执行查询的时候,需要在所有的分片上执行查询,因为无法知道被查询的关键词位于哪个分片,对于全文查询来说诚然如此,然而对于时序型的索引,当你从 my_index-* 中执行 now-3d 的范围查询时,可能很多分片上都不存在被查询的数据范围,因此 es 从 v5.6 开始引入了 pre-filter 机制:对于 Date 类型的 Range 查询,在对分片执行搜索之前,先检查一下分片是否包括被查询的数据范围,如果查询的范围与分片持有的数据没有交集,就跳过该分片。
分布式搜索过程原先由两个阶段执行:查询阶段和取回阶段,在引入了 pre-filter 之后,分布式搜索过程变成了三个阶段:预过滤阶段(pre-filter)、查询阶段和取回阶段。pre-filter 在查询阶段之前执行。