Допустим, у меня есть индекс эластичности со следующими данными:
{"var1": 14, "time": "2019-02-12T13:01:00.000Z"}
{"var2": 1423, "time": "2019-02-12T13:01:02.000Z"}
{"var3": 114, "time": "2019-02-12T13:01:03.000Z"}
{"var2": 214, "time": "2019-02-12T13:01:04.000Z"}
{"var3": 414, "time": "2019-02-12T13:01:05.000Z"}
{"var1": 124, "time": "2019-02-12T13:01:06.000Z"}
{"var2": 914, "time": "2019-02-12T13:01:07.000Z"}
{"var3": 8614, "time": "2019-02-12T13:01:06.000Z"}
{"var2": 74, "time": "2019-02-12T13:01:07.000Z"}
{"var3": 174, "time": "2019-02-12T13:01:08.000Z"}
{"var4": 144, "time": "2019-02-12T13:01:09.000Z"}
{"var4": 714, "time": "2019-02-12T13:01:10.000Z"}
{"var4": 813, "time": "2019-02-12T13:01:11.000Z"}
{"var2": 65, "time": "2019-02-12T13:01:12.000Z"}
{"var1": 321, "time": "2019-02-12T13:01:13.000Z"}
Я хотел бы написать ОДИН запрос, который может извлечь минимум переменной, максимум переменной и последние n значенийпеременной в данном интервале времени.Важно, чтобы мне был нужен фактический документ с минимальным или максимальным или последним значением (поэтому я использую top_hits для минимального и максимального значений вместо минимального или максимального агрегирования).
ИтакНа данный момент у меня есть этот запрос:
{
"query": {
"bool": {
"must": [
{
"range": {
"time": {
"gte": "2019-02-12T13:01:00.000Z",
"lt": "2019-02-12T13:01:15.000Z"
}
}
}
]
}
},
"size": 0,
"aggs": {
"max_var1": {
"top_hits": {
"size": 1,
"sort": [{
"var1": {"order": "desc"}
}]
}
},
"min_var2": {
"top_hits": {
"size": 1,
"sort": [{
"var2": {"order": "asc"}
}]
}
},
"last_var4": {
"top_hits": {
"size": 3,
"sort": [{
"time": {"order": "desc"}
}],
"_source": ["var4"]
}
}
}
}
Запрос корректно возвращает минимальное и максимальное значения, но не возвращает правильное последнее значение 3 для var4
, поскольку он берет последнее из всех документовв данный промежуток времени, а не документы, которые var4
в нем.Таким образом, вопрос заключается в том, как получить последние n документов для данной переменной внутри этого запроса.
Я знаю, что мог бы использовать API множественного поиска для выполнения нескольких запросов одновременно, но я хотел бы знать, если этовозможно иметь его в одном запросе.
Спасибо.