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