#elasticsearch #aggregation #elasticsearch-aggregation
#elasticsearch #агрегирование #elasticsearch-агрегация
Вопрос:
Я выполняю агрегацию верхнего хита во вложенной агрегации. Я хочу упорядочить верхние хиты по полю метки времени в корневом документе, чтобы получить самую последнюю версию вложенного документа (который может быть проиндексирован в несколько корневых документов). Хотя синтаксис, кажется, позволяет мне это сделать, извлеченные ключи сортировки кажутся «ненужными»; это одно и то же огромное число для каждого документа. (Ниже приведен лишь фрагмент гораздо более сложной агрегации — в противном случае такой подход может не иметь смысла — но в нем суть моей проблемы.)
{
"size": 0,
"aggs": {
"nested_doc": {
"nested": {
"path": "nested_doc"
},
"aggs": {
"most_recent": {
"top_hits": {
"sort": "_index_time"
}
}
}
}
}
}
В моих результатах ключ сортировки не соответствует ни одному такому «_index_time», и изменение порядка сортировки не имеет никакого эффекта. «_index_time» объявляется целым числом в корневом документе. Если я изменяю «_index_time» в запросе на какую-то бессмысленную строку, запрос выдает ошибку, поэтому я знаю, что он имеет смысл в том, что я спрашиваю, но он не выполняет сортировку — или, по крайней мере, не получает нужные данные для сортировки.
Как мне правильно отсортировать вложенные агрегаты по корневым свойствам?
В качестве альтернативы я попытался добавить copy_to: ‘nested_doc._index_time’ в объявление ‘_index_time’, и хотя это позволило мне указать ‘nested_doc._index_time’ в качестве ключа сортировки, это все равно привело к бессмысленным ключам сортировки. Поле просто неправильно определено?
_index_time: { type: 'integer'},
Ответ №1:
Я столкнулся с той же проблемой, затем я нашел одно решение во вложенной агрегации. В этом случае мы можем добавить параллельную агрегацию с включенной максимальной агрегацией index_time
. А затем отсортируйте его на основе добавленной вами максимальной агрегации. Вам просто нужно настроить order
оператор в соответствии с вашей агрегацией на первом уровне.
Пожалуйста, ознакомьтесь с приведенным ниже запросом:
{
"size": 0,
"aggs": {
"nested_doc": {
"nested": {
"path": "nested_doc"
},
"order": {
"max_date": "asc"
}
"aggs": {
"most_recent": {
"top_hits": {
"sort": "_index_time"
}
},
"max_date": {
"max": {
"field": "_index_time"
}
}
}
}
}
}
Надеюсь, это решит вашу проблему.