Я храню снимки данных в ElasticSearch. Я хочу выполнить агрегирование метрик для последнего снимка каждой записи, цель состоит в том, чтобы узнать, в каком состоянии находятся мои текущие (последние) данные
У меня есть что-то подобное
[
{
"id": 2,
"state": "deleted",
"timestamp": "2019-11-20T18:18:09+00:00"
},
{
"id": 2,
"state": "published",
"timestamp": "2019-11-19T18:18:09+00:00"
},
{
"id": 3,
"state": "published",
"timestamp": "2019-10-17T18:18:09+00:00"
},
{
"id": 3,
"state": "draft",
"timestamp": "2019-10-16T18:18:09+00:00"
}
]
Iпопробовал это
POST /snapshots/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"2": {
"terms": {
"field": "state.keyword",
},
"aggs": {
"1": {
"top_hits": {
"size": 1,
"sort": [
{
"timestamp": {
"order": "desc"
}
}
]
}
}
}
}
}
}
Но проблема в том, что он сначала создает корзину, и в этой корзине он выполняет сортировку и вычисляет top_hits, поэтому вместо
Удалено = 1
опубликовано = 1
черновик = 0
Возвращено
удалено = 1
опубликовано = 1
осадка = 1