MST

星途 面试题库

面试题:ElasticSearch中post_filter与query结合使用场景及差异

请阐述在ElasticSearch中,post_filter与query结合使用的常见场景有哪些?并且说明post_filter与query在执行时机、对评分影响方面有什么差异?
42.0万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

常见场景

  1. 基本过滤 + 后置过滤:在进行搜索时,先用query进行基础的条件筛选,例如查找包含特定关键词的文档。之后,使用post_filter来进一步筛选,如只返回最近一周内创建的文档。这样可以在确保相关性搜索的基础上,对搜索结果进行更细致的过滤。
  2. 多维度聚合分析query用于匹配符合业务主要搜索需求的文档,而post_filter用于在聚合分析前对文档进行额外过滤,使得聚合结果更加精准。比如在电商搜索中,query查找某类商品,post_filter则过滤出有库存的商品,再进行销量等聚合分析。
  3. 搜索结果缓存:由于post_filter不影响评分,当搜索场景中有缓存需求时,可使用query进行常规搜索匹配,post_filter在缓存命中后对缓存结果进行后置过滤,减少缓存的数据量和更新频率。

执行时机差异

  • query:在搜索过程中,query是最先执行的部分。它用于确定哪些文档与搜索请求中的条件相匹配,会遍历索引中的文档,根据定义的查询条件进行筛选。只有通过query筛选的文档才会进入后续处理阶段。
  • post_filterpost_filterquery筛选出匹配文档、计算完评分并且进行完聚合分析(如果有聚合操作)之后执行。它作用于query筛选后的结果集,进一步过滤文档。

对评分影响差异

  • queryquery不仅决定哪些文档被返回,还会影响文档的评分(_score)。query中的条件匹配程度会直接反映在文档的相关性得分上,匹配程度越高,得分越高,文档在搜索结果中的排序也就越靠前。
  • post_filterpost_filter只负责对已经通过query筛选且计算好评分的文档进行再次过滤,它不会影响文档的评分,仅仅是从已有的结果集中剔除不符合post_filter条件的文档。