-1

我想将所有具有 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 查询时,它会将“排序”优先于 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

谁能帮帮我。?

4

1 回答 1

0

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

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

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

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

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

sort=min(1, inv)
于 2016-10-13T19:13:52.340 回答