簡體   English   中英

單獨排序的Solr Boost查詢

[英]solr boost query with separate sort

我想將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的所有文檔下推到底部,然后應用“名稱asc”排序。

Doc1
Doc2
Doc5
Doc6
Doc3
Doc4

我的solr請求就像

bq:“(:AND -inv:” 0“)^ 999.0”&defType:“ edismax”

這里999是我給降級結果的等級。

這個提升查詢的效果很好。 它將所有inv = 0的文檔向下移動到底部。

但是,當我在solr查詢中添加&sort = name asc時,它會優先於bq排序“ sort”。我看到以下結果為“ 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

誰能幫幫我。

排序將覆蓋提升。

因此,您可以通過將條件映射轉換為提升值來將排序提升。

或者,您可以使用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}

Solr中的默認排序標准是score desc ,其中score是一個虛擬字段,它實際上代表文檔的分數。
一旦通過&sort=name asc ,它將覆蓋默認排序。

這里可能的解決方案可能是這樣的: &sort=score desc, name asc 字面意思是:請首先按score排序,對於分數相等的文檔,請按name升序進行平局。

只要您在doc1,doc2,doc5,doc6上獲得相等的分數,它就應該起作用。

如果不是這種情況,請查看此Solr Wiki鏈接以獲取更多詳細信息,如何使用inv:0懲罰文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM