2011-12-01 264 views
1

我正試圖爲新應用程序實現搜索引擎。Solr + Haystack搜索

該應用程序允許人們對項目進行評分(+1或-1) - 給項目a + ve或-ve評分。

當人們搜索項目時,我想考慮他們的評分並相應地對結果進行排序。如果項目匹配,它應該顯示出來。但是如果這是一個高分的比賽,它應該會提高一點結果。

一場非常好的比賽應該贏得比分高的比賽,所以需要與其餘的比賽一起進行加權(即我提高了我的頭銜)。

不以任何方式卡住Solr,只是今天才開始播放。

回答

0

使用Solr,您可以使用包含差異的文檔維護一個字段。
它們之間的差異可以在總和+ 1ve和-1ve之間。

Solr允許您使用function queries提高字段值。
因此,您可以使用差異字段上的提升進行查詢,其中差異更大的文檔對其他用戶評分更高。

從索引前端開始,由於這種差異會經常發生變化,因此每次都需要更新相應的文檔。 Solr不允許更新單個字段,因此您需要處理差異字段的增量更新。

如果這會讓您感到擔憂,可以嘗試使用ExternalFileField
這允許將某些文檔的某些字段(如排名,索引外部的流行度)映射到單獨的文件中。
可以更新文件並提交索引以反映更改。
該字段也可以與函數查詢一起使用,以根據需要提高結果,但有很多限制。

+0

謝謝 - 在等待答案時發現此問題 - 儘管如此。使用額外的增強功能:?q =搜索+文本和bf ='ord(排名)^ 10 - 10的提高只是爲了證明它的工作! –

0

您可以通過存儲排名的字段來排序結果。

sqs.filter(content='blah').order_by('rating') 
+0

只需按評級排序結果,而不是將評級值考慮在內以應用提升。因此,即使Solr得分相對較低,任何高評分的比賽都會出現在榜首。 –