【问题标题】:Elasticsearch get aggregation bucket size (number of elements in the bucket) without retrieving all dataElasticsearch 在不检索所有数据的情况下获取聚合桶大小(桶中元素的数量)
【发布时间】:2016-08-08 14:16:43
【问题描述】:

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

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

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

   }
}

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

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

【问题讨论】:

  • 我现在有确切的问题。你有解决办法吗?

标签: elasticsearch size metadata aggregate bucket


【解决方案1】:

这就是cardinality聚合的目的:

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

请记住,这是一个近似值 - 可以使用上面链接中记录的 precision_threshold 配置精度。

【讨论】:

  • 我知道什么是基数聚合。如果您仔细阅读我提到的内容,我想查看发送超过 1000 封邮件的 IP 地址数量。如果我只是做一个简单的基数,那么最终我们将计算发送邮件少于 1000 封的 IP 地址。
猜你喜欢
  • 2021-03-14
  • 2021-04-02
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
相关资源
最近更新 更多