在SQL中,您可以通过以下表达式进行排序:
SELECT * FROM a
ORDER BY CASE WHEN a.Category = 20 THEN 1 ELSE 0 DESC
所以类别= 20的记录都在最重要的位置。
这在Solr中是否可行?
答案 0 :(得分:5)
Solr没有if/then (at least not until 4.0),但它确实具有地图功能,并且能够在function queries中使用sort。您可以在排序中使用类似的东西来实现您的目标:
?q=*&sort=map(category,20,20,case,0),score desc
(未测试的)
的主题答案 1 :(得分:0)
如果您正在使用dismax请求处理程序,那么您可以以类似的方式使用boost查询。 http://wiki.apache.org/solr/DisMaxQParserPlugin#bq_.28Boost_Query.29请注意,这与您的SQL示例完全不同,但您可以使用它获得相同的结果。
答案 2 :(得分:0)
我接受了hross的答案,但也可以在Solr 1.3及以上版本中做这样的事情,使用:
/select?q={!func}map(Category,20,20,1,0)&sort=score desc
很酷的是你仍然可以对其他领域进行排序,所以:
&sort=score desc, name asc