Elasticsearch获取聚合桶大小(桶中元素的数量)而不检索所有数据

时间:2016-08-08 14:16:43

标签: elasticsearch size metadata aggregate bucket

我正在尝试获取有关Elasticsearch中聚合的信息。

我有一个索引,我存储邮件元数据(发件人IP,主题等)。我想要做的是我想获得发送超过1000封邮件的IP数量。 (例如,假设我们有3个IP地址,2000个邮件来自第一个IP ,1500个来自第二个,200个来自第三个IP 然后我想看到 2 作为聚合结果。)我写了以下查询:

GET /my_index/_search
{
   "size": 0,
   "aggs": {
      "ipAddresses": {
         "terms": {
            "field": "senderIpAddress",
            "min_doc_count": 1000,
            "size" : 0
         }
      }

   }
}

我可以在我的后端实现中获取存储桶并计算其大小,但是我需要获取存储桶中的所有数据才能执行此操作。它很慢,我想获得桶大小而不获取所有数据。

TL; DR,如何在不检索整个数据的情况下获得聚合桶的总大小?

1 个答案:

答案 0 :(得分:0)

这是cardinality聚合的目的:

{
 "size": 0,
 "aggs": {
    "ipAddressesCount": {
       "cardinality": {
          "field": "senderIpAddress"
       }
     }
  }
}

请注意,这是一个近似值 - 可以使用precision_threshold配置精度,如上面链接中所述。