如何获得具有大小集的聚合的唯一术语的总数?

Ric*_*rdo 1 unique elasticsearch elasticsearch-aggregation

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

{
  "aggs" : {
    "cities" : {
      "terms" : { 
        "field" : "city",
        "size": 20
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这个查询会给我前 20 个桶和它们的计数。我如何更改此查询以了解唯一"city"术语的总数,以便我可以显示诸如“显示 73 个中排名前 20 的城市”之类的内容?

Ric*_*rdo 5

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

{
  "aggs" : {
    "cities" : {
      "terms" : { 
        "field" : "city",
        "size": 20
      }
    },
    "unique_cities": {
      "cardinality": {
        "field": "city"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

"unique_cities": {
  "value": 73
}
Run Code Online (Sandbox Code Playgroud)

对 github 上此问题的贡献: 返回术语聚合的桶数

  • 基数聚合将返回近似数字。因此结果将是近似值而不是精确计数。供参考。 (3认同)