Ответ 1
Я бы порекомендовал вам не кэшировать результаты, по крайней мере, не на уровне приложений. Запуск 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);
...
}