【问题标题】:solr boost query with separate sort具有单独排序的 solr boost 查询
【发布时间】:2017-03-22 14:46:38
【问题描述】:

我想将所有 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 的文档向下推到底部,然后应用“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..我看到下面的结果带有“名称 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

谁能帮帮我。 ?

【问题讨论】:

    标签: sorting boost solr solr-query-syntax


    【解决方案1】:

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

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

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

    如果不是这种情况 - 请查看此 Solr Wiki link 了解更多详细信息如何使用 inv:0 惩罚文档。

    【讨论】:

      【解决方案2】:

      排序将覆盖升压。

      所以,通过使该条件映射到升压值,您要么将您的排序移动到升压。

      或者您将升压条件移动到SORT,使用查询()语法。这是来自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}
      

      【讨论】:

      • 有没有办法以dismax格式实现这个查询?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 2011-11-23
      相关资源
      最近更新 更多