Упорядочить по выражению в Solr - PullRequest
6 голосов
/ 22 июня 2011

В SQL вы можете упорядочить по выражению вроде:

SELECT * FROM a
ORDER BY CASE WHEN a.Category = 20 THEN 1 ELSE 0 DESC

, поэтому записи с категорией 20 находятся на вершине.

Возможно ли это в Solr?

Ответы [ 3 ]

5 голосов
/ 22 июня 2011

Solr не имеет if / then (по крайней мере, до 4.0) , но у него есть функция карты и возможность использовать запросы запросов в вашем сортировать .Вы, вероятно, можете использовать что-то подобное в своем роде, чтобы достичь того, что вы ищете:

 ?q=*&sort=map(category,20,20,case,0),score desc

(не проверено)

Вот поток, в котором говорится о с использованием карты дляоператор if .

0 голосов
/ 22 июня 2011

Я принял ответ Хросса, но также возможно сделать что-то подобное в Solr 1.3 и выше, используя:

/select?q={!func}map(Category,20,20,1,0)&sort=score desc

Круто то, что вы все еще можете сортировать по другим полям, поэтому:

&sort=score desc, name asc
0 голосов
/ 22 июня 2011

Если вы используете обработчик запросов dismax, то вы можете использовать расширенные запросы аналогичным образом.http://wiki.apache.org/solr/DisMaxQParserPlugin#bq_.28Boost_Query.29 Обратите внимание, что это не работает точно так же, как ваш пример SQL, но вы можете добиться с ним тех же результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...