По умолчанию Lucene возвращает результаты запроса в порядке релевантности (оценки). Вы можете передать поле сортировки (или несколько), тогда результаты будут отсортированы по этому полю.
Сейчас я ищу хорошее решение для получения результатов поиска в случайном порядке .
Плохой подход:
Конечно, я мог бы взять ВСЕ результаты и затем перетасовать коллекцию, но в случае 5 миллионов результатов поиска это неэффективно.
Элегантный постраничный подход:
С этим подход, вы сможете сообщить Lucene следующее:
а) Дайте мне результаты от 1 до 10 из 5 миллионов результатов в случайном порядке
б) Затем дайте мне от 11 до 20 (на основе той же случайной последовательности, что и в а).
c) Чтобы уточнить: если вы вызовете a) дважды, вы получите одинаковые случайные элементы.
Как вы можете реализовать этот подход?
Обновление от 27 июля 2012 г. Имейте в виду, что решение, описанное здесь для Lucene 2.9.x, не работает должным образом. Использование RandomOrderScoreDocComparator
приведет к тому, что определенные результаты будут дважды в итоговом списке.