Solr将所有有条件的文档降级



我想将所有具有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)

相关内容

  • 没有找到相关文章

最新更新