Согласно документации ES индексирование / удаление документа происходит следующим образом:
- Запрос получен на одном из узлов.
- Запрос перенаправлен в основной осколок документа.
- Операция, выполненная на основном фрагменте и параллельные запросы, отправленные на узлы реплики.
- Первичный узел шарда ожидает ответа от узлов реплики, а затем отправляет ответ на узел, где запрос был первоначально получен.
- Отправьте ответ обратно клиенту.
Теперь в моем случае я отправляю запрос на создание документа в ES в момент времени t, а затем отправляю запрос на удаление того же документа (используя delete_by_query) примерно за t + 800 миллисекунд. Эти запросы отправляются через систему обмена сообщениями (внутренняя реализация kafka), которая гарантирует, что запрос на удаление будет отправлен в ES только после получения ответа 200 OK для операции индексации от ES.
Согласно документации ES , delete_by_query создает конфликт версии 409, только если документы, присутствующие в запросе на удаление, были обновлены в то время, когда еще выполнялся delete_by_query.
В моем случае всегда гарантируется, что запрос delete_by_query будет отправлен в ES только после получения ответа 200 OK для всех документов, которые необходимо удалить. Следовательно, нет возможности обновления / создания документа, который должен быть удален во время операции delete_by_query.
Пожалуйста, дайте мне знать, если я что-то упустил или это проблема с ES.