#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
Надеюсь, это ответит на ваш вопрос 🙂