0

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

2 回答 2

3

排序将覆盖提升。

因此,您可以通过将该条件映射转换为提升值来将您的排序转换为提升。

或者,您使用query()语法将提升条件移动到排序中。这是 hoss的 Lucene/Solr Revolution 2016 演示中的精华之一(单击开始演示):

        qq = Harry
         q = +{!edismax v=$qq}
        qf = title actor writer director  keywords
      sort = query($title_sort,0) desc, title asc
title_sort = {!field f=title v=$qq}
于 2016-11-09T03:26:42.433 回答
1

Solr 中的默认排序标准是score desc,其中score是一个虚拟字段,它实际上代表文档的分数。
一旦通过&sort=name asc,它将覆盖默认排序。

这里可能的解决方案可能是这样的:&sort=score desc, name asc. 字面意思是:请先排序,对于得分相同的文件,请按升序score进行抢七。name

只要您对 doc1、doc2、doc5、doc6 的分数相等,它就应该有效。

如果不是这种情况 - 请查看此Solr Wiki 链接以获取更多详细信息如何使用inv:0.

于 2016-11-08T22:26:22.393 回答