2012-05-17 22 views
2

solr的排序指定一個特定的文檔,我想在第一solr的排序,我想在第一

例如指定一個特定的文檔:

結果:5,2,3,1

我想在第一,其他分類按照規則

2,1,3,5

該怎麼做?

回答

2

我知道有兩種方法可以嘗試解決這個使用Solr的。第一個是使用QueryElevationComponent。這使您可以在索引時間定義最佳結果。正如文檔中所建議的那樣,這對於在搜索結果頂部放置贊助結果或流行文檔非常有用。潛在的缺點是,您必須能夠在索引時間而不是在查詢時識別這些文檔。

另一種方法是在查詢時使用bq parameter提高所需的文檔。爲了提升文檔435,你應該這樣做:

...&bq=id:435^10 

不幸的是,這些方法都不能給你絕對控制結果的順序。

如果您不介意在執行搜索後處理結果,由Riking提供的解決方案肯定會完成這項工作。您可以考慮的另一種方法是在您的Solr模式中添加一個字段,用於定義顯示順序或優先級。然後,您可以對該字段進行排序以獲得所需的排序順序。

0

調用內建的sort()函數,然後將所需的元素移到最前面。

僞代碼,如果你沒有一個內置的方法將其轉移到前面:

tmp = desired; 
int dIndex = array.indexOf(desired); 
for(i=dIndex-1; i >= 0; i--) 
{ 
    array[i+1] = array[i] 
} 
-1

如果您使用標準查詢(而不是dismax)添加「OR id:2^1000」給您查詢。像這樣:

q=(text:lalala AND author:Bob) OR id:2^1000 

將在結果頂部放置ID = 2的文檔。

2

如果您使用的是Solr 3.1或更高版本,則可以使用sort by a function querymap函數對此很有用。

sort=map(field_name,5,5,0) asc 

在上面,field_name是要排序的字段的名稱,5是價值要推到前面,0必須用一些數字,你知道是不是所有被替換其他數字。