как я могу ограничить по баллу, прежде чем сортировать в запросе Solr - PullRequest
6 голосов
/ 08 декабря 2010

Я ищу "документы по продукту". Другими словами, мои solr документы - это записи о продуктах. Я хочу получить 50 лучших подходящих продуктов для запроса. Затем я хочу отсортировать 50 лучших документов по количеству набранных очков по названию или цене. Я не особо разбираюсь в том, как это сделать, поскольку сортировка по баллам, а затем по названию или цене не очень поможет, поскольку баллы являются плавающими.

Я бы не возражал, если бы я мог сделать что-то вроде сопоставления оценок с диапазонами (например, оценка 8.0–8.99 - в 8 ведрах), затем сортировка по диапазону, затем по именам, но поскольку нет нормализации для подсчета очков, это все равно усложнит ситуацию.

Tl; dr Как исключить документы с низкой оценкой из набора результатов solr перед сортировкой?

Ответы [ 3 ]

3 голосов
/ 08 декабря 2010

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

Вашзапрос будет выглядеть примерно так:

q={!frange l=5}query($qq)&qq=[awesome product]&sort=price asc

Установите аргумент l в параметре q-frange на нижнюю границу, по которой вы хотите фильтровать оценку, и замените параметр qq вашим пользовательским запросом.

1 голос
/ 10 декабря 2010

Как заметил Карл Йоханссон, вы можете выполнить фильтрацию на стороне клиента: загрузить первые 50 строк ответа (отсортированных по счету desc), а затем манипулировать ими, например, в JS.

Плагин jQuery DataTables фантастически работает для такого рода вещей: сортировка, сортировка по нескольким столбцам, динамическая фильтрация и т. Д. - и только с 50 строками это будет очень быстро, так что пользователи могут «играть» с сортировкой и фильтрацией, пока не найдут то, что хотят.

0 голосов
/ 08 декабря 2010

Я не думаю, что вы можете просто

исключить документы с низкой оценкой из набор результатов перед сортировкой

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

Если бы вы использовали Java (или PHP), вы могли бы получить 50 лучших документов, а затем пересортировать этот список на своем языке программирования, но я не думаю, что вы можете сделать это только с помощью SOLR.

В любом случае, я бы порекомендовал вам не идти по этому пути повторной сортировки результатов из SOLR, так как это просто запутает пользователя. Люди ожидают, что результаты поиска будут похожи на Google (и большинство других поисковых систем), где результаты возвращаются в той или иной форме рейтинга TFIDF.

Сказав это, вы можете использовать некоторые другие критерии для разделения документов с одинаковыми показателями релевантности, добавив коэффициент ускорения индекса , основанный на шкале ценового диапазона.

Я бы посоветовал вам использовать SOLR для его сильных сторон и использовать грани. Предоставьте фасет ценового диапазона слева (например, Ebay, Amazon и др.) И / или фасет категории продукта и т. Д. Также предоставьте виджет «сортировка», позволяющий сортировать результаты по названию продукта, если пользователь хочет это.

[ПРАВИТЬ] этот вопрос также может быть полезен:

Ранжирование результатов поиска в стиле Digg с помощью Lucene / Solr?

...