Solr 3.6中的条件排序

时间:2012-10-05 15:43:34

标签: sorting solr

我们正在运行Solr 3.6并且正在尝试对结果集应用条件排序。为了澄清,数据是一组出价,我们希望添加按当前用户的出价排序的选项,因此它无法作为常规排序(因为每个运行查询的用户的出价都不同) )。

结果集中的文档包含“CurrentUserId”和“CurrentBid”字段,因此我认为我们需要以下内容进行排序:

sort =((CurrentUserId = 12345)?CurrentBid:0)desc

这只是伪代码,但想法是如果Solr中的currentUserId与用户Id(本例中为12345)匹配,则按CurrentBid排序,否则,只使用0。

似乎通过查询进行排序可能是实现此目标(或至少是解决方案的一部分)的方法,使用类似以下查询的内容:

http://localhost:8080/solr/select/?q=:&sort=query(CurrentUserId:10330 AND CurrentBid:[1 TO *])+desc

这似乎对我不起作用,并导致以下错误:

sort param could not be parsed as a query, and is not a field that exists in the index: ...

Solr documentation表示查询函数可以用作Solr 1.4以后的排序参数,所以这看起来应该有效。

非常感谢任何有关如何实现这一目标的建议。

1 个答案:

答案 0 :(得分:3)

根据您提供的Solr文档链接

  

通过参数解除引用$ otherparam或通过“v”直接指定LocalParams中的查询字符串来支持任何类型的子查询。

因此,根据示例和您的查询,我认为以下一项或两项都有效:

http://localhost:8080/solr/select/?q=:&sort=query($qq)+desc&qq=(CurrentUserId:10330 AND CurrentBid:[1 TO *])

http://localhost:8080/solr/select/?q=:&sort=query({v='CurrentUserId:10330 AND CurrentBid:[1 TO *]'})+desc