ElasticSearch返回聚合AND字段值

时间:2018-01-03 22:16:35

标签: elasticsearch

假设我的ES索引中的每个文档都有以下字段:

ASIN, name, referenceNumber, videoViews, timeWatched

可以有许多具有相同ASIN 字段的文档。

我正在进行团队聚合,根据 ASIN字段在ES群集中​​聚合文档。 此聚合计算 videoViews 的总和以及每个ASIN存储桶的 timeWatched 的总和

ElasticSearch返回聚合响应,其中 ASIN - 每个存储桶的一个键, timeWatched 的总和以及 videoViews 的总和是此键的值

我的简单问题是如何使聚合返回名称 referenceNumber ?如果我知道具有相同 ASIN 的文档将具有相同的名称 referenceNumber

1 个答案:

答案 0 :(得分:2)

Elasticsearch术语aggs以类似于SQL Group的多种方式工作,因此您可以例如执行多个级别的aggs,例如。 ASIN - >名字 - >参考编号。这也包括您使用相同的ASIN等不同名称的情况。

{
    "aggs": {
       "AsinAgg": {
          "terms": {
              "field": "ASIN", "size":0
          },
          "aggs": {
              "nameAgg": {
                 "terms": {
                      "field": "name", "size": 0
                  },
                  "aggs" {.....}
              }
          }
       }
    }
}

另一种方法是使用agg中的top_hits并返回前1个匹配。如果你确定它们具有相同的名称和referenceNumber,那么你应该可以获得一个顶级命中。即使它可以在特定情况下工作,我也不建议这样做。阅读top_hits: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html