Переиндексация документов в elasticsearch с соответствующими обновлениями

#spring-boot #elasticsearch

#весенняя загрузка #elasticsearch

Вопрос:

Мне нужно переиндексировать все мои документы в новый индекс с обновленными сопоставлениями и другими настройками индекса, такими как количество сегментов.

События публикуются в разделе Kafka, а затем используются службой, которая отправляет это событие в elastic search. Итак, я не хочу прекращать использование событий при повторной индексации.

Для достижения этой цели я сохранил primaryIndex (имя старого индекса) и secondaryIndex (имя нового индекса) в application.properties приложении spring. Таким образом, при индексации документа приложение будет записывать события в оба индекса (первичный и вторичный) и считывать только из первичного индекса. Теперь я запущу _reindex API для перемещения документов из старого индекса в новый индекс. Поскольку повторная индексация будет длиться около 4-5 дней, событие может быть переопределено _reindex API, чего я хочу избежать.

Как я могу гарантировать, что мои документы не переопределяются _reindex API?

Как только повторная индексация будет выполнена, я могу удалить вторичный индекс из свойств моего приложения и primaryIndex заменить его новым именем индекса, а затем часть чтения также может быть выполнена из нового индекса.

Или есть какой-нибудь лучший подход для достижения того же?

Ответ №1:

Вы можете поручить _reindex API перемещать документы в новый индекс, только если его нет в новом индексе. Если документ уже присутствует в новом индексе, это может быть либо новое событие, либо событие обновления, которое вы не хотите переопределять.

Вы можете указать op_type: 'create' в API переиндексации. Для получения дополнительной информации, пожалуйста, перейдите по ссылке https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html

Надеюсь, это ответит на ваш вопрос 🙂