Я хочу найти сумму max для каждой группы в данных Elasticsearch. Например:
Данные:
id | gId | cost
----|-----|------
1 | 1 | 20
2 | 1 | 15
3 | 2 | 30
4 | 1 | 30 *
5 | 2 | 40 *
6 | 1 | 20
7 | 2 | 30
8 | 3 | 45 *
9 | 1 | 10
Я использую sum_bucket для суммирования по максимуму для группы. Это мой запрос:
{
"aggs": {
"T1":{
"terms": {
"field": "gId",
"size":3
},
"aggs":{
"MAX_COST":{
"max": {
"field": "cost"
}
}
}
},
"T2":{
"sum_bucket": {
"buckets_path": "T1>MAX_COST"
}
}
},
"size": 0
}
Ответ на запрос
"T1": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [ |
{ |
"key": 1, |
"doc_count": 5, |
"MAX": { |
"value": 30 |
} |
}, |
{ | How can ignore this part to return
"key": 2, | from elasticsearch query response
"doc_count": 3, |
"MAX": { |
"value": 40 |
} |
}, |
{ |
"key": 3, |
"doc_count": 1, |
"MAX": { |
"value": 45 |
} |
} |
]
},
"T2": {
"value": 115
}
T2.value - желаемый результат. Но я хочу, чтобы в результате запроса T1.buckets игнорировался из-за проблем с производительностью сети, потому что мои данные очень большие. Устанавливая T1.terms.size для определенного числа, только верхний номер результата эффекта в результате T2.value. Как можно игнорировать T1.buckets в результате запроса, который я пишу, или лучше суммировать запрос на Сумма макс для групповой проблемы?