假设我在ES中有这些数据。
| KEY | value |
|:-----------|------------:|
| A | 1|
| A | 2|
| B | 2|
| C | 3|
| D | 4|
| E | 5|
| E | 5|
| F | 6|
我用这个
{
"from": 0,
"size": 0,
"query": {
"filtered" : {
"query" : {
"match_all" : {}
},
"filter" : {
"bool" : {
"must" : [
{"terms": {"key": ["A", "B", "C", "D", "E", "F"]}}
]
}
}
}
},
"aggs" : {
"sum_value" : {
"terms" : { "field" : "key" },
"aggs" : {
"sum_value" : { "sum" : { "field" : "value" } }
}
}
}
}
获取相同键的总和,结果如下所示:
"sum_uv": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "A",
"doc_count": 2,
"sum_value": {
"value": 3
}
}
....
]
}
但是现在,我想要汇总同一组中的所有元素,例如,我有一个映射数据,它告诉我组信息:
group1 = [A, B, C]
group2 = [D, E, F]
.....
我认为我需要一个嵌套聚合用于此目的,但我不知道这样做。
结果如下:
sum_group1 = 8
sum_group2 = 20
......
提前致谢!
答案 0 :(得分:1)
至少有两种方法可以做到这一点:
使用过滤器的两个例子:
{
"size": 0,
"aggs": {
"groups": {
"filters": {
"filters": {
"group1": { "terms": { "key": [ "A","B","C" ] } },
"group2": { "terms": { "key": [ "D","E","F" ] } }
}
},
"aggs": {
"groupsum": {
"sum": {
"field": "key"
}
}
}
}
}
}
{
"size": 0,
"query": {
"match_all": { }
},
"aggs": {
"group1": {
"filter": {
"terms": {
"key": [ "A", "B", "C" ]
}
},
"aggs": {
"group1sum": {
"sum": {
"field": "value"
}
}
}
},
"group2": {
"filter": {
"terms": {
"key": [ "D", "E", "F" ]
}
},
"aggs": {
"group2sum": {
"sum": {
"field": "value"
}
}
}
}
}
}