8

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

有什么方法可以构建一个命中数上限为 N 的查询,以便能够构建一个仅限于前 N 个结果的聚合?如果是这样怎么办?

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

4

4 回答 4

1

您正在寻找Sampler Aggregation

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

或者,您可以使用字段或脚本和 max_docs_per_value 设置来控制在任何一个共享公共值的分片上收集的最大文档数。

于 2016-03-16T03:33:23.290 回答
0

如果您使用版本 > 1.3 的 ElasticSearch 集群,则可以通过将其嵌套在聚合中来使用top_hits 聚合,按所需字段排序并将size参数设置为 X。

相关文档可以在这里找到。

于 2014-08-21T15:18:09.083 回答
0

我需要将聚合限制为前 N 个命中

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

棘手的部分是_score在过滤器中以某种方式使用 of 并将其完全限制为 N 个条目......有一个limit过滤器可以为每个分片工作,但我认为它不会在这种情况下工作。

于 2014-08-22T17:50:29.687 回答
0

看起来采样器聚合现在可以用于此目的。请注意,它仅在 Elastic 2.0 中可用。

于 2016-03-15T20:34:40.403 回答