通过Solr中的表达式排序

时间:2011-06-22 09:12:17

标签: solr

在SQL中,您可以通过以下表达式进行排序:

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

所以类别= 20的记录都在最重要的位置。

这在Solr中是否可行?

3 个答案:

答案 0 :(得分:5)

Solr没有if/then (at least not until 4.0),但它确实具有地图功能,并且能够在function queries中使用sort。您可以在排序中使用类似的东西来实现您的目标:

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

(未测试的)

这是一个讨论using map for an if statement

的主题

答案 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