Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr降级所有带条件的文档_Solr_Edismax_Solr Query Syntax_Solr Boost - Fatal编程技术网

Solr降级所有带条件的文档

Solr降级所有带条件的文档,solr,edismax,solr-query-syntax,solr-boost,Solr,Edismax,Solr Query Syntax,Solr Boost,我想将inv=0(可能值从0到1000)的所有文档降级到结果集的末尾。我还有其他排序选项,比如name 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 我想实现下面的排序…在这里,我想将in

我想将inv=0(可能值从0到1000)的所有文档降级到结果集的末尾。我还有其他排序选项,比如name 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”排序

我的solr请求是

bq:(:和-inv:“0”)^999.0“&定义类型:“eDiscoveryMax”

这里是我给降级结果的排名

这个提升查询工作得很好。它将inv=0的所有文档下移到底部

但是当我将&sort=name asc添加到solr查询中时,它将“sort”优先于bq。我看到下面的结果是“name asc”


谁能帮帮我吗

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

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

sort=if(inv, 1, 0) desc, name desc
如果Solr无法自行解析
inv
,您可以使用
字段(inv)
,但这不是必需的

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

sort=min(1, inv)

谢谢但我不想按库存排序(库存可以有0到1000的值)。我只想按名称排序,但所有记录的末尾都有值0。映射函数在这里可用吗。默认情况下,如何使用“将所有值为0的记录放在末尾”是一种排序方式。通过使用如图所示的
if
函数查询(或min版本),用于排序的唯一值将为0或1。然后,下一个排序字段将再次给出该排序中的方向。如果这不能给出您期望的正确结果,请举例说明。使用map应该是不必要的(但也可能),但您仍然必须按值排序才能使文档排在最后。您好,我尝试了&sort=min(1,field(inv))desc,name\u ntk desc它不起作用。我尝试了1.sort=name desc,如果(存在)(查询({v='inv:0'})),1,0)desc alsofor某种原因,当我按enter时,评论关闭,我无法编辑stackoverflow上的评论。好的,对不起。我还尝试了sort=if(inv,1,0)desc,name desc也尝试了&sort=map(inv,0,0,inv,0),name desc……似乎没有任何效果。我不熟悉solr术语。请给我整个排序查询字符串好吗?
sort=if(inv, 1, 0) desc, name desc
sort=min(1, inv)