Elasticsearch: ответ API UpdateByQuery возвращает неправильный статус

У меня проблема с API UpdateByQuery при попытке обновить документ, которого нет в эластичном поиске.

Описание проблемы

  1. Мы создаем по одному индексу на каждый день, например test_index-2020.03.11, test_index-2020.03.12… и поддерживаем восемь дней (сегодняшние, а также семь дней на прошлой неделе) индексы.

  2. Когда данные прибывают (чтение по одному или сразу из темы Kafka), нам нужно либо обновить (который может существовать в любом из 8-дневных индексов), если данные уже существуют с заданным идентификатором, либо сохранить их, если они не существуют (до текущего дневной индекс).

Решение, которое я пытаюсь сейчас использовать, когда данные поступают один за другим:

  • Использование UpdateByQuery со встроенным скриптом для обновления документа

  • Если BulkByScrollResponse возвращает обновленный счетчик 0, сохраните документ.

Вопросы:

Даже если документ не существует, я вижу, что BulkByScrollResponse возвращает обновленное поле как ненулевое (1,2,3,4…) следующим образом

BulkIndexByScrollResponse[sliceId=null,updated=1,created=0,deleted=0,batches=1,versionConflicts=0,noops=0,retries=0,throttledUntil=0s]

Из-за этого не удалось вызвать запрос на сохранение документа.

Как подойти, если необходимо обновить большую часть документов (с набором разных идентификаторов документов) с их соответствующим содержанием с помощью одного запроса? Смогу ли я добиться с помощью UpdateByQuery?

Примечание. Учитывая объем данных, которые нужно обработать в час, нам нужно избегать множественных обращений к Elasticsearch.

Идентификатор документа имеет формат str1:str2: Используется:Sat Mar 14 23:34:39 IST 2020

Но даже если документа не существует, я могу видеть обновленный счет как ненулевой

Добавляем еще пару пунктов о подходе, который я пытаюсь: - В моем случае всегда есть только один документ, который должен обновляться для каждого запроса, поскольку я пытаюсь обновить документ, соответствующий данному идентификатору - Мы настроили шарды и реплики как "number_of_shards": 10, "number_of_replicas": 1 -Мы придерживаемся этого подхода, так как не знаем, в каком индексе находится фактический документ

Если соответствует максимум один документ, то в поле "Обновленное" ответа не должно быть более 1

Ниже приведены несколько выходных данных, которые я получаю как часть ответа: BulkIndexByScrollResponse[sliceId=null,updated=9,created=0,deleted=0,batches=1,versionConflicts=1,noops=0,retries=0,throttledUntil=0s] BulkIndexByScrollResponse[sliceId=null,updated=10,created=0,deleted=0,batches=1,versionConflicts=0,noops=0,retries=0,throttledUntil=0s]

0 ответов

Другие вопросы по тегам