假设我的ES索引中的每个文档都有以下字段:
ASIN, name, referenceNumber, videoViews, timeWatched
可以有许多具有相同ASIN 字段的文档。
我正在进行团队聚合,根据 ASIN字段在ES群集中聚合文档。 此聚合计算 videoViews 的总和以及每个ASIN存储桶的 timeWatched 的总和。
ElasticSearch返回聚合响应,其中 ASIN - 每个存储桶的一个键, timeWatched 的总和以及 videoViews 的总和是此键的值
我的简单问题是如何使聚合返回名称和 referenceNumber ?如果我知道具有相同 ASIN 的文档将具有相同的名称和 referenceNumber ?
答案 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