Lucene 2.9.2: Как отображать результаты в случайном порядке?

По умолчанию Lucene возвращает результаты запроса в порядке релевантности (оценки). Вы можете передать поле сортировки (или несколько), тогда результаты будут отсортированы по этому полю.

Сейчас я ищу хорошее решение для получения результатов поиска в случайном порядке .

Плохой подход:
Конечно, я мог бы взять ВСЕ результаты и затем перетасовать коллекцию, но в случае 5 миллионов результатов поиска это неэффективно.

Элегантный постраничный подход:
С этим подход, вы сможете сообщить Lucene следующее:
а) Дайте мне результаты от 1 до 10 из 5 миллионов результатов в случайном порядке
б) Затем дайте мне от 11 до 20 (на основе той же случайной последовательности, что и в а).
c) Чтобы уточнить: если вы вызовете a) дважды, вы получите одинаковые случайные элементы.

Как вы можете реализовать этот подход?


Обновление от 27 июля 2012 г. Имейте в виду, что решение, описанное здесь для Lucene 2.9.x, не работает должным образом. Использование RandomOrderScoreDocComparator приведет к тому, что определенные результаты будут дважды в итоговом списке.

5
задан Community 23 May 2017 в 10:28
поделиться