Elasticsearch: ответ API UpdateByQuery возвращает неправильный статус - PullRequest
0 голосов
/ 15 марта 2020

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

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

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

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

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

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

  • Если BulkByScrollResponse возвращает обновленный счетчик 0, сохраните do c

Проблемы:

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

BulkIndexByScrollResponse [sliceId = null, updated = 1, созданный = 0, удаленный = 0, пакеты = 1, versionConflicts = 0, noops = 0, повторные попытки = 0, throttledUntil = 0s]

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

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

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

Do c ID находится в формат str1: str2: используется: сб 14 марта 23:34:39 IST 2020

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

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

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

Ниже приведены несколько выходных данных, которые я получаю как часть ответа: BulkIndexByScrollResponse [sliceId = null, updated = 9, созданный = 0, удалить ted = 0, пакеты = 1, versionConflicts = 1, noops = 0, повторные попытки = 0, throttledUntil = 0s] BulkIndexByScrollResponse [sliceId = null, обновленный = 10, создан = 0, удален = 0, пакеты = 1, versionConflicts = 0, Без операционное = 0, повторы = 0, throttledUntil = 0s]

...