首页 > 解决方案 > 如何获取具有大小集的聚合中唯一术语的总数?

问题描述

在ElasticSearch 查询上使用术语聚合时,结果会将存储桶限制为前 10 项或在size参数上设置的值。例如:

{
  "aggs" : {
    "cities" : {
      "terms" : { 
        "field" : "city",
        "size": 20
      }
    }
  }
}

此查询将为我提供前 20 个存储桶及其计数。如何更改此查询以了解唯一"city"术语的总数,以便我可以呈现类似“显示 73 个前 20 个城市”的内容?

标签: elasticsearchuniqueelasticsearch-aggregation

解决方案


可以在同一个查询上请求基数聚合。因此,在提供的示例中,我们将拥有:

{
  "aggs" : {
    "cities" : {
      "terms" : { 
        "field" : "city",
        "size": 20
      }
    },
    "unique_cities": {
      "cardinality": {
        "field": "city"
      }
    }
  }
}

除了元素(包含)之外,"aggregations"响应还将具有具有基数的元素:"cities"buckets"unique_cities"

"unique_cities": {
  "value": 73
}

归功于 github 上的这个问题: Return number of buckets for terms aggregation


推荐阅读