按Solr中的表达式排序

按Solr中的表达式排序,solr,Solr,在SQL中,可以通过以下表达式进行排序: SELECT * FROM a ORDER BY CASE WHEN a.Category = 20 THEN 1 ELSE 0 DESC 因此,类别=20的记录位于顶部 这在Solr中可能吗?如果您使用的是Demax请求处理程序,那么您可以以类似的方式使用boost查询。请注意,这与您的SQL示例的功能并不完全相同,但您可以使用它获得相同的结果。Solr没有,但它有一个映射函数,并且能够在您的SQL示例中使用。您可能可以在您的分类中使用类似的方法来实

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

SELECT * FROM a
ORDER BY CASE WHEN a.Category = 20 THEN 1 ELSE 0 DESC
因此,类别=20的记录位于顶部


这在Solr中可能吗?

如果您使用的是Demax请求处理程序,那么您可以以类似的方式使用boost查询。请注意,这与您的SQL示例的功能并不完全相同,但您可以使用它获得相同的结果。

Solr没有,但它有一个映射函数,并且能够在您的SQL示例中使用。您可能可以在您的分类中使用类似的方法来实现您所追求的目标:

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


下面是一个讨论的主题。

我接受了hross的答案,但在Solr 1.3及更高版本中,也可以使用以下方法执行类似操作:

/select?q={!func}map(Category,20,20,1,0)&sort=score desc
最酷的是,您仍然可以在其他字段上排序,因此:

&sort=score desc, name asc

谢谢,我们运行的是1.4,从3.1开始就支持排序功能,这让人感到很遗憾。这种方式的问题是,您无法按其他字段排序(至少是我发现的)。