[英]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.