【Elasticsearch】post_filter

post_filter是在进行聚合之后,再对最终返回的文档列表做额外过滤,不破坏那份聚合/统计的完整性”**。

也就是说如果在聚合之前进行过滤,然后进行聚合,聚合的内容其实是针对于过滤后的文档进行的,比如如果聚合是求平均分,如果先过滤 那么聚合的时候 针对的就是过滤后的文档进行求平均,而是用post_filter 在聚合之后 针对返回的hits文档过滤 不影响聚合 聚合是针对全部的文档来求平均。

换句话说:

  • 如果不需要聚合/统计——直接把条件写进 bool.filterquery 里即可,post_filter 完全没必要。

  • 只有在既想保留完整聚合,又想对最终列表再砍一刀时,post_filter 才成为“不破坏聚合”的工具。

“在用户已经拿到聚合/统计结果以后,再对最终返回的文档列表做一次额外过滤,而不污染聚合。”

因此:

  • 如果你的场景根本不需要聚合(例如只想搜完就完),直接把条件放到 bool.filter 即可,post_filter 完全多余。

  • 只有当你既要用聚合展示全集统计,又要让用户最后点选、切分列表时,post_filter 才派上用场。

所以:
post_filter ≠ 为聚合而生,它只是“不破坏聚合”的一种过滤手段。

post_filter 只过滤最终返回的 hits,完全不碰聚合(aggs)的数据范围;聚合仍然基于 query + filter 阶段后的全集来计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值