как получить все документы, которые имеют высокий балл в Lucene - PullRequest
0 голосов
/ 26 октября 2011

Для определенного типа запроса я получаю много документов с одинаковым рейтингом.Я хочу, чтобы случайно вытащить 10 документов каждый раз, когда этот запрос вызывается.Таким образом, пользователи, выполняющие одинаковый поиск, каждый раз будут получать разные результаты.Это звучит как очень плохая идея, но на самом деле это имеет смысл для бизнеса.

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

Как мне это сделать?Есть ли другой способ?

Обратите внимание, что я все еще хочу, чтобы лучшие результаты оставались на вершине, просто перетасованными.Я не хочу включать более низкие оценки в случайном порядке и не исключать их из списка внизу списка.

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 26 октября 2011

См. Эту ссылку ( «Перемешивание» набора результатов Lucene Hits ) о рандомизации результатов поиска с использованием CustomScoreQuery.

0 голосов
/ 26 октября 2011

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

<fieldType name="random" class="solr.RandomSortField" />

<dynamicField name="random*" type="random" indexed="true" stored="false"/>

вы можете сортировать их, например, sort=random_1234 desc
Генерация случайного числа, например 1234 всегда вернет новый комплект документов. Однако, тот же номер будет генерировать тот же набор.

Проверка реализации lucene.net.

...