我想知道如何在Elasticsearch中使用terms
聚合时获取具有最高doc_count的存储桶。我正在使用Kibana示例数据kibana_sample_data_flights:
GET kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"destinations": {
"terms": {
"field": "DestCityName"
}
}
}
}
如果存在一个具有最大doc_count
最大值的存储桶,我可以将术语聚合的size
设置为1,但是如果有两个具有相同的最大doc_count
值的存储桶,则此方法不起作用。由于我遇到过管道聚合,因此我认为应该有一种简便的方法来实现这一目标。最大存储桶聚合似乎可以处理多个最大存储桶,因为该指南说:
[...] which identifies the bucket(s) with the maximum value of [...]
但是,完成这项工作的唯一方法是使用变通办法,并使用
value_count
进行子聚合:GET kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"destinations": {
"terms": {
"field": "DestCityName"
},
"aggs": {
"counter": {
"value_count": {
"field": "_id"
}
}
}
},
"max_destination": {
"max_bucket": {
"buckets_path": "destinations>counter"
}
}
}
}
a)通常,有更好的方法来找到具有最大值的条件存储桶吗?
b)有使用管道聚合的更好方法吗?
提前致谢!
最佳答案
好了,您可以按照以下方式进行简化,而无需使用 value_count
聚合。
但是,不幸的是,使用 max_bucket
是获得所需内容的唯一方法。
POST <your_index_name>/_search
{
"size": 0,
"aggs": {
"destinations": {
"terms": {
"field": "DestCityName"
}
},
"max_destination": {
"max_bucket": {
"buckets_path": "destinations>_count" <---- Note the usage of _count
}
}
}
}
希望这可以帮助!
关于elasticsearch - 获取术语存储的最大存储桶(使用管道聚合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62761140/