我有一套280万个文档,其中包含我用ElasticSearch查询的标记集,但其中许多文档可以通过一个ID组合在一起。我想使用标签查询我的数据,然后通过重复的ID聚合它们。我的搜索结果通常有成千上万的文档,但我只想汇总前100个搜索结果。如何将聚合仅限制为查询的前100个结果?
答案 0 :(得分:4)
用于限制任何子聚合的过滤聚合'处理 获得最高分的文件样本。
"aggs": {
"bestDocs": {
"sampler": {
// "field": "<FIELD>", <-- optional, Controls diversity using a field
"shard_size":100
},
"aggs": {
"bestBuckets": {
"terms": {
"field": "id"
}
}
}
}
}
此查询会将子聚合限制为结果中的前100个文档,然后按ID对其进行存储。
或者,您可以使用field or script and max_docs_per_value
设置来控制在任何一个共享共享值的分片上收集的最大文档数。
答案 1 :(得分:1)
可以设置 size 参数来定义应从整个术语列表中返回多少个术语桶。
默认情况下,协调搜索过程的节点将请求每个分片提供自己的最大大小的术语桶,一旦所有分片响应,它将把结果减少到最终列表,然后返回给客户端。这意味着如果唯一术语的数量大于大小,则返回的列表略有偏差且不准确(可能是术语计数略有偏差,甚至可能是应该在顶部大小的术语水桶没有退回)。
如果设置为0,则大小将设置为Integer.MAX_VALUE
。
以下是返回前100名的示例代码:
{
"aggs" : {
"products" : {
"terms" : {
"field" : "product",
"size" : 100
}
}
}
}
您可以参考this了解更多信息。
答案 2 :(得分:-3)
您可以使用min_doc_count
参数
{
"aggs" : {
"products" : {
"terms" : {
"field" : "product",
"min_doc_count" : 100
}
}
}
}