【问题标题】:How to get distinct documents in elasticsearch如何在弹性搜索中获取不同的文档
【发布时间】:2016-02-13 16:43:51
【问题描述】:

我有一个包含campaign_id(不是唯一的)、clicks(每个campaign_id)字段的文档。 如何计算唯一 campaign_ids clicks 的总和。例如

campaign_id=1, clicks=2;
campaign_id=2, clicks=3;
campaign_id=1, clicks=2;

唯一 campaign_idclicks 的总和为 5。

主要思想是获取具有唯一campaign_ids 的文档,然后求和。
如何在 Elasticsearch 中创建这样的查询?

尝试在聚合中使用过滤器来实现这一点,但过滤器应该是一个桶而不是指标。

【问题讨论】:

  • 尝试聚合函数

标签: elasticsearch unique distinct aggregation cardinality


【解决方案1】:

最简单的方法是在 ES 2.0 中使用pipeline aggregations,首先使用max 聚合来获得单个值(因为您说相同的campaign_id 具有相同的@ 987654324@ 值),然后是sum_bucket 管道聚合得到最终总和:

{
  "size": 0,
  "aggs": {
    "unique_ids": {
      "terms": {
        "field": "campaign_id",
        "size": 10
      },
      "aggs": {
        "one_value": {
          "max": {
            "field": "clicks"
          }
        }
      }
    },
    "sum_uniques": {
      "sum_bucket": {
        "buckets_path": "unique_ids>one_value"
      }
    }
  }
}

【讨论】:

  • 感谢您的回答。是的,它在 2.0 版本中是可能的,但我们仍在使用 1.7。
  • 我认为这在 1.7 中是不可能的。管道聚合是 2.0 中的主要功能之一,用户长期以来一直想要这样的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
相关资源
最近更新 更多