Пейджинг результатов поиска Lucene - PullRequest
18 голосов
/ 09 декабря 2008

Я использую Lucene для отображения результатов поиска в веб-приложении. Я также настраиваю страницу для показа того же. Результаты поиска могут варьироваться от 5000 до 10000 и более. Может кто-нибудь сказать, пожалуйста, лучшая стратегия для подкачки и кэширования результатов поиска?

1 Ответ

32 голосов
/ 09 декабря 2008

Я бы порекомендовал вам не кэшировать результаты, по крайней мере, не на уровне приложения. Запуск Lucene на коробке с большим объемом памяти, которую операционная система может использовать для файлового кэша, поможет.

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

Используя объект Hits, полученный в результате поиска, вы можете получить доступ к документам для такой страницы:

Hits hits = searcher.search(query);
int offset = page * recordsPerPage;
int count = Math.min(hits.length() - offset, recordsPerPage);
for (int i = 0; i < count; ++i) {
  Document doc = hits.doc(offset + i);
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...