Lucene, кажется, кеширует результаты поиска - почему? - PullRequest
6 голосов
/ 26 ноября 2009

В моем проекте мы используем Lucene 2.4.1 для полнотекстового поиска. Это проект J2EE, IndexSearcher создается один раз. В фоновом режиме индекс обновляется каждые несколько минут (при изменении содержимого). Пользователи могут искать в индексе через механизм поиска на странице.

Проблема в том, что результаты, возвращаемые Lucene, как-то кэшируются.

Это сценарий, который я заметил:

  • Я запускаю приложение и ищу «ключевое слово» - возвращается 6 результатов,
  • Индекс обновляется с использованием Luke Я вижу, что теперь 8 запросов для запроса "ключевого слова",
  • Я снова ищу с помощью приложения, снова возвращается 6 результатов.

Я проанализировал нашу конфигурацию и нигде не нашел кеширования. Я отладил поиск, и в нашем коде нет кэширования, searcher.search возвращает 6 результатов.

Имеет ли кеш Lucene какие-то внутренние результаты? Какие свойства и т.д. я должен проверить?

Ответы [ 3 ]

10 голосов
/ 26 ноября 2009

Чтобы увидеть изменения, внесенные IndexWriters в индекс, для которого у вас есть открытый IndexReader, обязательно вызовите IndexReader.reopen () , чтобы увидеть последние изменения.

Убедитесь также, что ваш IndexWriter фиксирует изменения либо с помощью явного commit (), close (), либо с помощью autoCommit, установленным в true.

1 голос
/ 06 марта 2011

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

1 голос
/ 28 ноября 2009

В версиях до 2.9.0 Lucene автоматически кэшировал результаты запросов. В более поздних выпусках кэширование отсутствует, если вы не заключите запрос в QueryFilter, а затем поместите результат в CachingWrapperFilter. Вы могли бы рассмотреть переход на выпуск> = 2.9.0, если повторное открытие индекса становится проблемой

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