在弹性搜索中限制聚合到顶部X命中

时间:2014-08-21 15:10:48

标签: elasticsearch aggregation elasticsearch-aggregation

ElasticSearch基于查询的所有命中构建聚合结果,与from和size参数无关。这是我们在大多数情况下想要的,但我有一个特殊情况,我需要将聚合限制在前N个命中。限制过滤器不适合,因为它不能获取最好的N个项目,而只能获取与查询匹配的第一个X(每个分片),而与其分数无关。

有没有办法构建一个命中数上限为N的查询,以便能够构建一个限制在那些前N个结果中的聚合?如果是这样的话?

辅助问题:限制匹配文档的分数可能是另一种选择,即使在我的情况下我需要一个固定的界限。 min_score参数是否会影响聚合?

4 个答案:

答案 0 :(得分:0)

如果您使用版本为>的ElasticSearch集群; 1.3,您可以使用 top_hits聚合将其嵌套在聚合中,在您想要的字段上排序,并将size参数设置为X.

可以找到相关文档here

答案 1 :(得分:0)

  

我需要将聚合限制在前N个点击

使用嵌套聚合,您的顶级存储桶可以表示N个命中,并在该存储桶上运行嵌套聚合。我会为顶级聚合尝试filter聚合。

棘手的部分是在过滤器中以某种方式使用_score并将其精确限制为N个条目......每个碎片都有一个limit过滤器,但我不知道我认为它可以在这种情况下发挥作用。

答案 2 :(得分:0)

看起来Sampler Aggregation现在可用于此目的。请注意,它仅适用于Elastic 2.0。

答案 3 :(得分:0)

您正在寻找Sampler Aggregation

我有一个类似的答案解释here

  

或者,您可以使用字段或脚本以及max_docs_per_value   用于控制任何文件收集的最大文件数的设置   一个具有共同价值的碎片。