2009-10-14 1 views
0

Чтобы обновить мой индекс, мне нужно добавить/изменить индекс поиска каждые 5 минут. Способ, которым я настроен, - это два индекса: один в полноэкранном каталоге и один в каталоге Incremental, и для их поиска я использую MultiSearcher.Lucene.Net поддерживает индексы при использовании MultiSearcher

Теперь я пишу процесс для поддержания индекса. То, что я делаю, - передать последнюю дату индекса хранимой процедуре, и БД возвращает все новые/измененные записи на основе поля «Обновлено» в БД. Затем я просматриваю 2 каталога, открывая IndexReader для каждого каталога и удаляя документ на основе TermQuery для первичного ключа. Затем я добавляю записи к инкрементному индексу с помощью IndexWriter и оптимизирую его.

Что происходит, когда я выполняю последующий поиск, но это то, что записи, которые, как я знаю, находятся в индексе, не возвращаются.

Я делаю неправильное обслуживание индекса?

ответ

1

Разве ваш {Multi} IndexSearcher закрыт и повторно открыт в интерфейсе поиска? По соображениям производительности я видел, что некоторые приложения сохраняют объект SearchIndexer в памяти, чтобы избежать накладных расходов на повторное открытие объекта и его базового каталога при каждом поиске, однако при этом IndexSearcher не получает изменений/дополнений к основному индексу.

Я не уверен, что это то, что происходит в вашем случае - но обычно, когда я видел, как поисковик не собирал новые документы, это связано с тем, что искатель был открыт до того, как элемент был добавлен в индекс. .. просто мысль.

+0

Да, я закрываю IndexSearcher после каждого поиска. – druta