У меня есть индекс эластичного поиска, содержащий документы, которые представляют сущности в данный момент времени. Когда объект меняет состояние, создается новый документ с отметкой времени. Когда мне нужно получить текущее состояние всех объектов, я могу сделать следующее:
GET https://127.0.0.1:9200/myindex/_search
{
"collapse": {
"field": "entity_id"
},
"sort" : [{
"timestamp": {
"order": "desc"
}
}]
}
Однако я бы хотел дополнительно отфильтровать результат коллапса. Когда объекты удаляются, я создаю новый документ, который включает флаг is_deleted вместе с отметкой времени в поле вложенных метаданных. Я хотел бы расширить вышеупомянутый запрос, чтобы полностью отфильтровать те объекты, которые были удалены. Использование термина «фильтр» в entity_metadata.is_deleted: true
, очевидно, не работает, потому что тогда мой результат просто включает последний документ с этим entity_id до того, как он будет помечен как удаленный. Как я могу отфильтровать результаты после свертывания, чтобы исключить любые захороненные энтузиасты?