У меня проблема с API UpdateByQuery при попытке обновить документ, которого нет в Elasti c search
Описание проблемы
Мы создаем по одному индексу на каждый день, например test_index-2020.03.11, test_index-2020.03.12… и мы поддерживаем восьмидневные (как сегодня, так и на прошлой неделе семь дней) индексы.
Когда поступают данные (чтение по одному или в большом количестве из 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]