我想将所有具有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的文档推到底部,然后应用name asc排序。
Doc1
Doc2
Doc5
Doc6
Doc3
Doc4
我的solr请求就像
bq: "(: AND -inv:"0")^999.0" &defType:"edismax"
这里999是我给降级结果的排名。
这个提升查询工作良好。它将所有inv=0的文档移到底部。
但是当我添加&sort=name asc到solr查询时,它优先考虑"sort"超过bq..我看到下面的结果与"name 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
有谁能帮帮我吗?div ? 简单的解决方案:您可以先按inv
排序,然后按其他值排序。这要求inv
只有真(1)或假(0)值。我想情况并非如此,所以:
您可以通过函数查询排序-并且您可以使用函数if
根据是否设置值返回不同的值:
sort=if(inv, 1, 0) desc, name desc
如果Solr本身不能解析inv
,您可以使用field(inv)
,但它不应该是必需的。
另一个选择是使用min
函数来获得排序字段的1或0,这取决于它是否在库存中:
sort=min(1, inv)