solr boost查询单独排序

时间:2016-11-08 20:39:38

标签: sorting boost solr solr-query-syntax

我想将所有具有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的所有文档移到底部。

但是当我向solr查询中添加& sort = name asc时,它优先于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

任何人都可以帮助我。 ?

2 个答案:

答案 0 :(得分:3)

排序将覆盖提升。

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

或者您使用 query()语法将提升条件转换为排序。这是来自the Lucene/Solr Revolution 2016 presentation by hoss的宝石之一(点击开始演示):

        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}

答案 1 :(得分:0)

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

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

只要你对doc1,doc2,doc5,doc6有相同的分数,它就应该有效。

如果不是这样 - 请查看此Solr Wiki link,详细了解如何使用inv:0惩罚文档。