2016-07-06 4 views
0

В моем приложении Spring/Lucene я использую Lucene IndexWriter, TrackingIndexWriter, SearcherManager и ControlledRealTimeReopenThread.Индексы Lucene, удаляемые после перезапуска приложения

Сейчас я пытаюсь проиндексировать тысячи документов. Для этого я добавил Apache ActiveMQ и индексировал каждый документ в отдельном сообщении.

Я заметил одну серьезную проблему - в случае аномального завершения JVM после перезапуска следующего приложения мой индекс Lucene пуст, потому что операция IndexWriter.commit() не была выполнена.

Если я вызываю IndexWriter.commit() после каждого trackingIndexWriter.addDocument(document); все работает нормально.

Я не думаю, что рекомендуется использовать IndexWriter.commit() после каждого trackingIndexWriter.addDocument(document); особенно с точки зрения производительности.

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

ответ

1

IndexWriter.commit() будет только очищать данные. Это не будет ни оптимизировать ваш индекс, ни закрыть автора.

Этот же Indexwriter можно использовать снова, чтобы добавить дополнительные данные.

Не вызывайте IndexWriter.close(), который не только очищает данные, но и оптимизирует индекс, и эта операция происходит значительно медленнее.

Как только вы закончите, вы, наконец, сможете закрыть оптимизацию.

Таким образом, с точки зрения производительности, это можно зафиксировать после каждого добавления документа.