Solr降级条件为

时间:2016-10-13 15:57:12

标签: solr edismax solr-query-syntax solr-boost

我想将所有具有inv = 0(可能值从0到1000)的文档降级到结果集的末尾。我有其他排序选项,如名称desc也作为查询的一部分。

以下是我的solr文件

Doc1 : name=apple , Inv=2
Doc2 : name=ball , Inv=1
Doc3 : name=cat , Inv=0
Doc4 : name=dog , Inv=0
Doc5 : name=fish , Inv=4
Doc6 : name=Goat , Inv=5

我希望实现以下排序...在这里,我想将inv = 0的所有文档向下推到底部,然后应用"名称asc"排序

Doc1
Doc2
Doc5
Doc6
Doc3
Doc4

我的solr请求就像

  

bq:"( AND -inv:" 0")^ 999.0" &安培; defType:" edismax"

这里999是我给降级结果的等级。

这个提升查询工作正常。它会将inv = 0的所有文档移到底部。

但是当我向solr查询中添加& sort = name asc时,它会优先排序"排序"在bq..i我看到下面的结果"名称为asc"。

Doc1 : name=apple , Inv=2
Doc2 : name=ball , Inv=1
Doc3 : name=cat , Inv=0
Doc4 : name=dog , Inv=0
Doc5 : name=fish , Inv=4
Doc6 : name=Goat , Inv=5

任何人都可以帮助我。 ?

1 个答案:

答案 0 :(得分:0)

简单的解决方案:您可以先按inv排序,然后按其他值排序。这要求inv只有true(1)或false(0)值。我想情况并非如此,所以:

您可以按函数查询排序 - 您可以使用函数if根据值是否设置返回不同的值:

sort=if(inv, 1, 0) desc, name desc

如果Solr无法自行解决inv,您可以使用field(inv),但这不是必需的。

另一种选择是使用函数min为排序字段获取1或0,具体取决于它是否在库存中:

sort=min(1, inv)