Lucene.net с IndexSearcher / IndexWriter в веб-приложении - PullRequest
3 голосов
/ 30 октября 2008

В настоящее время я запускаю Lucene.net в веб-приложении и задаюсь вопросом о лучшем методе с точки зрения производительности.

В настоящее время он настроен так, что все записи индекса обрабатываются вместе в запланированном процессе вместе с оптимизацией индекса.

Однако для поиска - я в настоящее время открываю и закрываю поисковик для поиска, который, как я знаю, не идеален.

Как вы думаете, что будет лучшим подходом в этой ситуации?

Мне нужно будет закрыть и снова открыть средство поиска индекса после обработки обновлений / оптимизации, чтобы запланированный процесс (который является приложением для консоли Windows) должен был сообщить о своем завершении веб-приложению.

Ответы [ 2 ]

5 голосов
/ 30 октября 2008

Я только что интегрировал Lucene.NET в BugTracker.NET. Я не уверен, что то, что я сделал, является лучшим, но, похоже, работает хорошо.

Я создаю индекс при запуске приложения.

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

Между тем, у меня есть IndexWriter, который обновляет индекс при изменении данных. Он просто немного меняется, поэтому быстро выполняет свою задачу. Когда он запускается, он захватывает ту же самую блокировку, уничтожает поисковик, обновляет индекс и повторно воссоздает поисковик. Новый поисковик остается до следующего обновления индекса. Поисковик всегда работает с актуальным индексом.

Вы можете получить исходный код BugTracker.NET и посмотреть файлы my_lucene.cs и search_text.aspx. Это все в этих двух файлах, и кода не так много.

0 голосов
/ 31 октября 2008

Вы можете вызвать метод IsCurrent () для читателей, чтобы проверить, доступна ли новая версия индекса, и затем снова открыть его. Не может быть лучшим способом, но достаточно прост, и если ваши требования не очень велики, этого будет достаточно.

...