聚合如何大于命中总数?

时间:2015-07-28 09:31:13

标签: elasticsearch

我有

类型的记录
 {
   "_index": "constant",
   "_type": "host",
   "_id": "AU7TX249tNLhGJRMfUXb",
   "_score": 1,
   "_source": {
               "private": true,
               "host-ip": "172.22.69.64",
               }
}

如果我通过

查找privatehost-ip的汇总
POST constant/host/_search
{
   "query": {
      "match_all": {}
   },
   "size": 0,
   "aggs":{
       "test":{
           "cardinality":{
               "field": "host-ip"
           }
       },
      "test2":{
            "cardinality":{
                "field": "private"
           }
       }
   }
}

我得到了结果

{
   "took": 7,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 7730,
      "max_score": 0,
      "hits": []
   },
   "aggregations": {
      "test": {
         "value": 7860
      },
      "test2": {
         "value": 2
      }
   }
}

我对上述结果的理解如下:

  • 索引host
  • 中共有7730个constant类型的文档
  • private有两个不同的值(这是预期的)

我不明白当索引中的文档总数为7730时,如何能够获得7860个host-ip的不同值?

我对totalhits的理解是否正确?

1 个答案:

答案 0 :(得分:0)

Cardinality aggregation并不准确。正如医生所说:

  

单值度量标准聚合,用于计算不同值的近似计数

所以,这就是数字背后的原因。

您可以使用选项precision_threshold来使结果更准确,但会消耗更多资源。