К счастью, вы можете сделать это с bucket_sort
агрегацией , которая была добавлена в Elasticsearch 6.4.
Сделайте это с bucket_sort
POST my_index/doc/_search
{
"size": 0,
"query": {
"range": {
"timestamp": {
"gte": "2018-11-28",
"lte": "2018-11-28"
}
}
},
"aggs": {
"hits_per_minute": {
"date_histogram": {
"field": "timestamp",
"interval": "minute"
},
"aggs": {
"total_hits": {
"sum": {
"field": "hits_count"
}
},
"max_transactions_per_minute": {
"bucket_sort": {
"sort": [
{"total_hits": {"order": "desc"}}
],
"size": 1
}
}
}
}
}
}
Это даст вам ответ, подобный следующему:
{
...
"aggregations": {
"hits_per_minute": {
"buckets": [
{
"key_as_string": "2018-11-28T21:10:00.000Z",
"key": 1543957800000,
"doc_count": 3,
"total_hits": {
"value": 11
}
}
]
}
}
}
Обратите внимание, что в выводе нет дополнительной агрегации, а вывод hits_per_minute
усекается (потому что мы попросили дать ровно один, самый верхний сегмент).
Сделайте это с помощью filter_path
Существует также универсальный способ фильтрации выходных данных Elasticsearch: Фильтрация ответов , поскольку этот ответ предполагает.
В этом случае будет достаточно просто выполнить следующий запрос:
POST my_index/doc/_search?filter_path=aggregations.max_transactions_per_minute
{ ... (original query) ... }
Это даст ответ:
{
"aggregations": {
"max_transactions_per_minute": {
"value": 11,
"keys": [
"2018-12-04T21:10:00.000Z"
]
}
}
}
Надеюсь, это поможет!