При каких условиях безопасно выполнять операции ввода-вывода (перемещение / замена) по индексу люцен (компас)
Иногда возникает необходимость перестроить люцен-индекс с нуля. Поскольку я не хочу, чтобы индекс был неполным в течение нескольких часов при сборке, я использую отдельный экземпляр компаса, чтобы построить новый индекс и впоследствии заменить его в файловой системе. Перед этим все экземпляры компаса останавливаются с помощью SearchEngineIndexManager#stop()
после этого они перезапускаются с помощью SearchEngineIndexManager#start()
Тем не менее, время от времени индекс кажется поврежденным во время этих операций.
Не безопасно ли заменить индекс в файловой системе, когда SearchEngineIndexManger остановлен? Есть ли другие необходимые меры предосторожности, чтобы рассмотреть, нужно ли мне работать с индексом lucene в файловой системе?
2 ответа
Мне удалось решить проблему, добавив 5 секунд sleep
после остановки и перед повторным запуском IndexManager
, Может быть, уродливое решение, но у меня работает.
Чтобы быть уверенным, я также добавил вызов SearchEngineIndexManager#clearCache() после перезапуска.
Как насчет перевода вашего сервера в режим только для чтения, а затем запускайте переиндексацию для второго экземпляра Lucene (который имеет свой собственный индекс). Когда индексация завершится, выключите все серверы и передайте новый индекс на ваш основной сервер lucene.