Фильтрация свернутых результатов в Elasticsearch - PullRequest
1 голос
/ 21 июня 2019

У меня есть индекс эластичного поиска, содержащий документы, которые представляют сущности в данный момент времени. Когда объект меняет состояние, создается новый документ с отметкой времени. Когда мне нужно получить текущее состояние всех объектов, я могу сделать следующее:

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 до того, как он будет помечен как удаленный. Как я могу отфильтровать результаты после свертывания, чтобы исключить любые захороненные энтузиасты?

1 Ответ

1 голос
/ 27 июня 2019

Я хотел бы предложить, чтобы вместо добавления флага is_deleted ко всем entity_id документам можно было бы добавить поле date_deleted с датой удаления для всех документов этой сущности, а затем при просмотредокумент с указанием даты и deleted_date, который вы знаете, был ли документ ЖИВОЙ или удален на эту дату.

Кроме того, это позволит вам рассмотреть:

  1. все документы, которые не имеют поля deleted_date (то есть не удалены) и
  2. вседокументы, которые имеют deleted_date до / после указанной даты.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...