В SQL вы можете упорядочить по выражению вроде:
SELECT * FROM a ORDER BY CASE WHEN a.Category = 20 THEN 1 ELSE 0 DESC
, поэтому записи с категорией 20 находятся на вершине.
Возможно ли это в Solr?
Solr не имеет if / then (по крайней мере, до 4.0) , но у него есть функция карты и возможность использовать запросы запросов в вашем сортировать .Вы, вероятно, можете использовать что-то подобное в своем роде, чтобы достичь того, что вы ищете:
?q=*&sort=map(category,20,20,case,0),score desc
(не проверено)
Вот поток, в котором говорится о с использованием карты дляоператор if .
Я принял ответ Хросса, но также возможно сделать что-то подобное в Solr 1.3 и выше, используя:
/select?q={!func}map(Category,20,20,1,0)&sort=score desc
Круто то, что вы все еще можете сортировать по другим полям, поэтому:
&sort=score desc, name asc
Если вы используете обработчик запросов dismax, то вы можете использовать расширенные запросы аналогичным образом.http://wiki.apache.org/solr/DisMaxQParserPlugin#bq_.28Boost_Query.29 Обратите внимание, что это не работает точно так же, как ваш пример SQL, но вы можете добиться с ним тех же результатов.