Lucene - открыть закрытый IndexWriter - PullRequest
3 голосов
/ 05 октября 2010

Вот моя проблема, я выполняю add (), чтобы добавить документы в мой индекс, а затем закрываю () его. Это прекрасно работает!

Теперь у меня есть новое требование, и каждый раз, когда я что-то сохраняю в своей БД, мне нужно обновлять мой Индекс. Я не могу снова создать indexWriter, потому что это занимает более 4 минут, поэтому мне просто нужно обновить () или добавить () документ в индекс.

Для этого я не делаю index.close (), я делаю index.commit () после заполнения индекса ... но я думаю, что он должен быть закрыт, а затем открыт для update ().

Есть предложения? СПАСИБО!

1 Ответ

11 голосов
/ 05 октября 2010

close является дорогостоящей операцией, и Javadocs рекомендует использовать commit, если вы часто обновляете.Javadocs заявляет, что close:

Передает все изменения в индекс и закрывает все связанные файлы.Обратите внимание, что это может быть дорогостоящей операцией, поэтому попробуйте повторно использовать один писатель вместо закрытия и открытия нового.

Я считаю, что разница между close и commitв том, что commit только сбрасывает данные, чтобы сделать их видимыми для читателей, тогда как close также оптимизирует индекс.Это делает commit примерно в 5 раз быстрее , чем close.

Если вы добавляете данные непрерывно, лучше до commit и, наконец, close, когда вы всесделано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...