在SQL中,您可以按表达式排序,例如:
SELECT * FROM a
ORDER BY CASE WHEN a.Category = 20 THEN 1 ELSE 0 DESC
那么类别为20的记录将排在最前面。
这在Solr中是否可行?
在SQL中,您可以按表达式排序,例如:
SELECT * FROM a
ORDER BY CASE WHEN a.Category = 20 THEN 1 ELSE 0 DESC
那么类别为20的记录将排在最前面。
这在Solr中是否可行?
Solr没有if/then (至少在4.0之前),但它有一个map函数和使用function queries在你的sort中的能力。你可以在你的排序中使用类似这样的东西来实现你想要的效果:
?q=*&sort=map(category,20,20,case,0),score desc
(未经测试)
这是一个关于使用 map 进行 if 语句的讨论的线程。
我已经接受了hross的答案,但在Solr 1.3及以上版本中也可以使用以下方法:
/select?q={!func}map(Category,20,20,1,0)&sort=score desc
很酷的是,你仍然可以按其他字段排序,例如:
&sort=score desc, name asc