Я выполняю агрегацию лучших попаданий во вложенной агрегации. Я хочу упорядочить лучшие совпадения по полю метки времени в корневом документе, чтобы получить самую последнюю версию вложенного документа (который может быть проиндексирован в несколько корневых документов). Хотя синтаксис, кажется, позволяет мне это сделать, извлеченные ключи сортировки кажутся «мусорными»; это одно и то же огромное число для каждого документа. (Нижеследующее является лишь фрагментом гораздо более сложной агрегации — в противном случае этот подход может не иметь смысла — но суть моей проблемы в нем.)
{
"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'},