使用Elasticsearch聚合,是否可以仅返回每个聚合的第一个匹配?我没有在Elastic docs中找到此功能。
head
我使用top_hits聚合来确保每个聚合的第一次命中是相关的命中,所以如果我只能在单独的列表中返回每个聚合的第一个命中,那将是很好的。这是可能的,还是需要以编程方式循环聚合查询结果?
答案 0 :(得分:1)
执行聚合时,您需要检查结果中的aggregations
json,而不是hits
。由于您已经知道Top hits Aggregation,因此请注意它提供了size
选项,因此只需将其设置为1
,每个广告单元就会有一次点击。
在此示例中,我通过名为catL1
的索引中的字段进行聚合,top-categories
是我选择为其聚合提供的名称:
{
"aggs": {
"top-categories": {
"terms": {
"field": "catL1"
},
"aggs": {
"top-categories_hits": {
"top_hits": {
"size" : 1
}
}
}
}
}
}
现在我的结果是:
{
"took": 33,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1248280,
"max_score": 1,
"hits": [
...
]
},
"aggregations": {
"top-categories": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 217939,
"buckets": [
{
"key": "category1",
"doc_count": 412189,
"top-categories_hits": {
"hits": {
"total": 412189,
"max_score": 1,
"hits": [
ONLY_1_HIT
]
}
}
},
{
"key": "category2",
"doc_count": 3000189,
"top-categories_hits": {
"hits": {
"total": 3000189,
"max_score": 1,
"hits": [
ONLY_1_HIT
]
}
}
}
]
}
}
}
你可以看到有一个名为aggregations
的json,它每个桶只包含一个命中(我用占位符替换了命中)
修改强>
您当然也可能对hits
总感兴趣,但我的意思是aggregations
正是您在此问题中所寻找的内容