elasticsearch - 获取术语存储的最大存储桶(使用管道聚合)

标签 elasticsearch

我想知道如何在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/

相关文章:

elasticsearch - NoHostAvailable :, 在 elassandra 中使用网络拓扑策略插入查询

elasticsearch - 使用 elasticsearch 进行地理查询

elasticsearch - 邻里地理查询

jdbc - Elasticsearch river 插件的替代品

spring-boot - 在Spring Boot中使用不同的弹性指数进行测试

elasticsearch - 使用脚本而不禁用Elasticsearch中的 “script.disable_dynamic”

sql - 高读/写数据存储

elasticsearch - 使用Elasticsearch手动运行调度的JDBC River实例

elasticsearch - 如何配置filebeat和logstash? 3个虚拟机

elasticsearch - Elasticsearch比较两个字段