@bioforge
Верстающий пыхер

Как правильно обновлять/переиндексировать?

Всем привет!

Как правильно обновлять/переиндексировать документы когда изменились настройки индекса(добавились или изменились настройки в analysis), или когда изменились mappings ?
При этом может так, что во время переиндексации могут добавиться/измениться документы.
  • Вопрос задан
  • 1853 просмотра
Пригласить эксперта
Ответы на вопрос 2
AlexXYZ
@AlexXYZ
O Keep Clear O
Вроде как если меняете analysis или mapping, то требуется только полная переиндексация (Исключение, если вы что-то добавили в mapping, а не изменили или отменили). В отличии от SQL/NoSQL баз ES не переиндексирует данные внутри себя, даже если вы их там храните.

P.S.
Извините, но мне кажется, что вы только что начали его изучать. В этом его особенность. Это не база данных, хоть он и может хранить в себе данные. Это существенное отличие от привычного, когда данные отдельно, индексы отдельно.
Ответ написан
@Vdm17
PHP Developer
Первое что приходит в голову - используйте вариант, описанный тут: https://www.elastic.co/guide/en/elasticsearch/guid...

Хорошо описан вариант как сделать ре-индекс без остановки приложения.

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

Можете использовать вариант, предложенный Захаров Александр - дополнительное поле с датой обновления документа. В таком случае вам надо будет после реиндекса сделать еще дополнительно проход по старому индексу и найти документы с отличающимися датами.
Второй вариант - использовать вместо дат версии документов. Но! Для этого документы во время реиндекса надо переносить вместе с номерами версий (иначе, они все будут добавлены с _version=1).
Третий вариант - комбинация первых двух - использовать свое специальное поле для версий документов и сказать об этом ES - у него есть поддержка использования "внешних версий".

И во втором и в третьем варианте, все равно после реиндекса надо проходить по старому индексу и определять какие документы поменялись.
Худший случай, который вы можете получить: вы делаете реиндекс, в это время в старом индексе меняют документ X. Реиндекс завершается, начинается поиск изменений. В это время документ X снова меняют, но уже в новом индексе. В процессе поиска изменений вы видите что документ X был изменен в старом индексе и его надо перенести в новый - а тут он уже тоже снова изменен. Что делать в таком случае - решать вам. Все зависит от важности данных и можно ли объединить изменения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы