Позволяет ли Lucene.Net одновременно выполнять поиск и индексирование? - PullRequest
0 голосов
/ 01 сентября 2010

Когда моя коллекция файлов обновляется, я хочу найти самые новые данные ...

Мне нравится Windows. Расширенный поиск.

Ответы [ 3 ]

2 голосов
/ 01 сентября 2010

Из FAQ по Lucene :

Разрешает ли Lucene поиск и индексацию одновременно?

Да.Однако IndexReader выполняет поиск индекса только по «моменту времени», когда он был открыт.Любые обновления индекса, добавленные или удаленные документы, не будут видны до тех пор, пока IndexReader не будет вновь открыт.Таким образом, ваше приложение должно периодически повторно открывать свои IndexReaders, чтобы увидеть последние обновления.Метод IndexReader.isCurrent () позволяет проверить, произошли ли какие-либо обновления в индексе с момента открытия IndexReader.

По общему признанию, это ссылка на версию Java, но я ожидаю.NET версия работает так же.

1 голос
/ 30 ноября 2010

В книге "Lucene in Action, второе издание" есть раздел о поиске почти в реальном времени.По сути, вы получаете IndexReader, вызывая метод IndexWriter.GetReader (), и сохраняете его.При запуске поиска вызовите IndexWriter.GetReader () и сравните возвращенный читатель с сохраненным значением.Если это то же самое, просто используйте существующий ридер.Несколько потоков могут использовать один и тот же считыватель.

Если он отличается, закройте старый и сохраните новый.Используйте сохраненное значение для поиска.

За сценой новый читатель включает все ожидающие (незафиксированные) документы в указатель.Ожидающие изменения сбрасываются на диск (или RamDirectory), но не фиксируются.

0 голосов
/ 01 сентября 2010

Да, вы можете искать и индексировать одновременно.Единственное, что вам нужно учесть, это то, что когда вы открываете IndexReader, он в основном берет «снимок» индекса: вам нужно закрыть и снова открыть IndexReader, чтобы получить любые новые обновления (или вызвать reopen,что может быть несколько быстрее, чем закрытие и повторное открытие).

...