Первое что приходит в голову - используйте вариант, описанный тут:
https://www.elastic.co/guide/en/elasticsearch/guid...
Хорошо описан вариант как сделать ре-индекс без остановки приложения.
По поводу того, что делать с документами, которые могут быть изменены в процессе выполнения реиндекса. Есть несколько вариантов.
Можете использовать вариант, предложенный
Захаров Александр - дополнительное поле с датой обновления документа. В таком случае вам надо будет после реиндекса сделать еще дополнительно проход по старому индексу и найти документы с отличающимися датами.
Второй вариант - использовать вместо дат версии документов. Но! Для этого документы во время реиндекса надо переносить вместе с номерами версий (иначе, они все будут добавлены с _version=1).
Третий вариант - комбинация первых двух - использовать свое специальное поле для версий документов и сказать об этом ES - у него есть поддержка использования "внешних версий".
И во втором и в третьем варианте, все равно после реиндекса надо проходить по старому индексу и определять какие документы поменялись.
Худший случай, который вы можете получить: вы делаете реиндекс, в это время в старом индексе меняют документ X. Реиндекс завершается, начинается поиск изменений. В это время документ X снова меняют, но уже в новом индексе. В процессе поиска изменений вы видите что документ X был изменен в старом индексе и его надо перенести в новый - а тут он уже тоже снова изменен. Что делать в таком случае - решать вам. Все зависит от важности данных и можно ли объединить изменения.