首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ElasticSearch: post_filter还是filter?

ElasticSearch: post_filter还是filter?
EN

Stack Overflow用户
提问于 2015-08-19 10:26:43
回答 3查看 11.1K关注 0票数 13

假设我在这里解释了一个类似的情况:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-post-filter.html

在我偶然读到这篇文章之前,我一直在为这种场景使用filter而不是post_filter,它产生的输出就像post_filter一样。

我的问题是:它们是同一件事吗?如果不是,推荐使用哪种更有效的方法?为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-19 12:36:45

搜索命中而言,它们是一样的,即您获得的命中结果将根据filtered查询中的过滤器或post_filter中的过滤器进行正确过滤。

然而,就聚合而言,最终结果将不会相同。两者之间的差异归结为将在哪个文档集上计算聚合。

如果您的筛选器位于filtered查询中,则将根据查询选择的文档集和filtered查询中的筛选器计算聚合,即与您将在响应中获得的文档集相同。

如果您的筛选器位于post_filter中,则将在由各种查询选择的文档集上计算聚合。在该文档集上计算聚合后,在返回匹配的文档之前,post_filter中的过滤器会进一步过滤该文档。

总结一下,

  • a filtered query会影响
  • 的搜索结果和聚合,而post_filter 只会影响搜索结果,而不会影响aggregations
票数 25
EN

Stack Overflow用户

发布于 2019-01-22 01:47:59

filterpost_filter之间的另一个重要区别在任何答案中都没有提到:performance

TL;DR

除非您确实需要用于聚合,否则不要使用 post_filter

来自The Definitive Guide

警告:性能注意事项

仅当您需要对搜索结果和聚合进行差异化过滤时,才使用post_filter。有时人们会使用post_filter进行常规搜索。

不要这样做!post_filter的性质意味着它在查询之后运行,因此过滤(如缓存)带来的任何性能优势都会完全丧失。

post_filter应仅与聚合结合使用,并且仅当您需要差异筛选时使用。

票数 4
EN

Stack Overflow用户

发布于 2015-08-19 12:36:49

在我的测试中,我发现filter的行为与post_filter完全一样。两者都只影响命中部分。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32085557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档