Lucene, похоже, кэширует результаты поиска - почему?
Вопрос
В моем проекте мы используем Lucene 2.4.1 для полнотекстового поиска.Это проект J2EE, IndexSearcher создается один раз.В фоновом режиме индекс обновляется каждые пару минут (при изменении содержимого).Пользователи могут выполнять поиск по индексу с помощью механизма поиска на странице.
Проблема в том, что результаты, возвращаемые Lucene, похоже, каким-то образом кэшируются.
Это сценарий, который я заметил:
- Я запускаю приложение и выполняю поиск по 'ключевому слову' - возвращается 6 результатов,
- Индекс обновляется, используя Люк Я вижу, что теперь есть 8 результатов для запроса "ключевое слово",
- Я снова выполняю поиск с помощью приложения, и снова возвращается 6 результатов.
Я проанализировал нашу конфигурацию и нигде не нашел никакого кэширования.Я отладил поиск, и в исходном коде нет кэширования, searcher.search
возвращает 6 результатов.
Кэширует ли Lucene каким-то образом результаты внутри компании?Какие свойства и т.д.должен ли я проверить?
Решение
Чтобы увидеть изменения, внесенные IndexWriters в индекс, для которого у вас есть открытый IndexReader, обязательно вызовите IndexReader.повторно открыть() чтобы увидеть последние изменения.
Убедитесь также, что ваш Индексатор фиксирует изменения либо с помощью явной фиксации(), close(), либо с установленным значением автоматической фиксации true.
Другие советы
В версиях, предшествующих 2.9.0, Lucene автоматически кэшировала результаты запросов.В более поздних версиях кэширование отсутствует, если вы не обернете свой запрос в QueryFilter, а затем результат в CachingWrapperFilter .Вы могли бы рассмотреть возможность перехода на версию >= 2.9.0, если повторное открытие индекса становится проблемой
Еще одно замечание:Чтобы IndexReader мог находить обновленные документы других потоков в режиме реального времени, при инициализации IndexReader параметр "только для чтения" должен быть false.В противном случае метод reopen() не будет работать.