繁体   English   中英

ElasticSearch:post_filter还是过滤?

[英]ElasticSearch: post_filter or filter?

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

在我偶然发现这篇文章之前,我一直在使用filter而不是post_filter来实现这种情况,它产生的输出就像post_filter一样。

我的问题是:它们是一样的吗? 如果没有,哪一个是推荐的,更有效的方法,为什么?

搜索命中而言,它们是相同的,即根据filtered查询中的过滤器或post_filter中的filtered器正确过滤您获得的命中。

但是,就聚合而言,最终结果将不同。 两者之间的差异归结为将计算聚合的文档集。

如果您的过滤器位于filtered查询中,那么您的聚合将根据查询所选的文档集和filtered查询中的filtered ,即您将在响应中获得的同一组文档。

如果您的过滤器位于post_filter ,那么您的聚合将在您的各种查询选择的文档集上计算。 一旦在该文档集上计算了聚合,后者将由post_filter的过滤器进一步过滤,然后返回匹配的文档。

把它们加起来,

  • filtered查询会影响搜索结果和聚合
  • post_filter 只影响搜索结果,但不影响聚合

在我的测试中,我发现过滤器的行为与post_filter完全相同。 两者都只影响命中部分。

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

TL; DR

不要使用post_filter除非您确实需要它进行聚合。

来自权威指南

警告:性能考虑因素

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

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

post_filter只能与聚合一起使用,并且仅在需要差异过滤时才使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM