如何在elasticsearch中获取聚合桶的总数?

1bqhqjot  于 2021-06-09  发布在  ElasticSearch
关注(0)|答案(2)|浏览(535)

我使用elasticsearch术语聚合来查看有多少文档在其“foo”字段中具有特定值,如下所示:

{
    ...
    "aggregations": {
        "metastore": { 
            "terms": { 
                "field": "foo",
                "size": 50 
            }
        }
    }
}

我得到的答复是:

"aggregations": {
      "foo": {
            "buckets": [
                {
                    "key_as_string": "2018-10-01T00:00:00.000Z",
                    "key": 1538352000000,
                    "doc_count": 935
                },
                {
                    "key_as_string": "2018-11-01T00:00:00.000Z",
                    "key": 1541030400000,
                    "doc_count": 15839
                },
                ...
                /* 48 more values */
             ]
      }
 }

但我将不同值的数目限制为50。如果这个字段中有更多不同的值,它们不会在响应中返回,这很好,因为我不需要全部返回,但是我想知道它们有多少。那么,如何得到不同值的总数呢?如果答案提供了完整的示例查询,那就太棒了,谢谢。

6ojccjat

6ojccjat1#

您可能可以添加一个基数聚合,它将为字段提供唯一数量的项。这将等于术语聚合的桶数。

{
    ...
    "aggregations": {
        "metastore": { 
            "terms": { 
                "field": "foo",
                "size": 50 
            }
        },
        "uniquefoo": {
          "cardinality": {
            "field": "foo"
          }
        }
    }
}

注意:请记住基数聚合在某些情况下可能返回近似计数。要了解更多信息,请阅读这里。

bgtovc5b

bgtovc5b2#

这个 cardinality 聚合是有帮助的。不过,请注意,返回的数字只是一个近似值,可能无法反映如果您请求所有桶,您将获得的桶的确切数量。但是,在低基数字段上,精度相当高。

{
    ...
    "aggregations": {
        "unique_count": {
          "cardinality": {
            "field": "foo"
          }
        },
        "metastore": { 
            "terms": { 
                "field": "foo",
                "size": 50 
            }
        }
    }
}

相关问题