Рекомендуется ли держать Lucene IndexWriter & IndexSearcher открытым в течение всего срока службы приложения - PullRequest
5 голосов
/ 21 февраля 2012

В документации Lucene говорится, что быстрее всего использовать один экземпляр IndexWriter и IndexSearcher в приложении.

В данный момент у меня постоянно открыт статический экземпляр IndexWriter, а статический экземпляр IndexSearcher всегда остается открытым, но перестраивается, если IndexWriter выполняет какие-либо операции CRUD с индексом. , Я реализовал метод Dispose в своем классе управления индексами, который закрывает и IndexWriter, и IndexSearcher, когда приложение заканчивается (однако это веб-приложение, так что это потенциально месяцы работы без вызова).

Это звучит как разумный способ делать что-то? А также использование статических экземпляров создает проблемы с многопоточностью ..? То есть я должен заблокировать мой писатель и искатель при использовании?

1 Ответ

6 голосов
/ 21 февраля 2012

Создатели, читатели и поисковики Lucene являются поточно-ориентированными (см., Например, 2-ю заметку в документе IndexWriter или 1-ю в документации IndexSearcher ), поэтомуНет проблем повторного использования одних и тех же экземпляров в нескольких потоках.

В соответствии с описанием того, как вы управляете создателями индекса и поисковиками, я думаю, что вы повторно реализуете два служебных класса Lucene, которые могут оказаться полезными: NRTManager и SearcherManager , которые упрощают управление поисковыми системами практически в реальном времени.

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