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

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

该查询将为我提供前20个存储桶及其计数。如何更改此查询以了解唯一"city"字词的总数,因此可以显示“显示73个排名前20位的城市”之类的内容?

最佳答案

可以在同一查询上请求Cardinality 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

10-01 17:20