2012-06-14 36 views
3

我一直在這裏很長一段時間的瀏覽器,但從來沒有一個問題,還沒有問。所以這裏去:SOLR查詢參數,以避免與同一製造商氾濫

我遇到了一個問題,使用SOLR搜索在SOLR(讓我們說DVD播放器)的一些搜索往往會返回來自同一製造商在前50個結果中的很多搜索結果。

現在假設我想爲我的最終用戶提供搜索的最佳體驗,同時也爲我的產品目錄中的最佳產品種類提供一種減少同類品牌以避免出現的缺點在搜索結果中超過5次。爲了記錄,我使用了一個相當標準的DisMax搜索處理程序。

這個邏輯只適用於非常廣泛的查詢,如'DVD播放器'或'硬盤',自然我不會用它來塑造'三星DVD播放器'的搜索結果。

我不知道SOLR是否有一個可以自動執行此操作的漂亮功能,或者我是否必須開始修改搜索處理程序邏輯。

+0

好問題+1。 – Yavar

+0

您是否找到了解決方案? –

回答

-1

要做到這一點是一個漫長而複雜的過程,但值得嘗試。假設您要搜索的主要字段是名爲title的單個字段,首先您需要確保其中包含「dvd player」的所有文檔具有相同的分數。這可以通過忽略Solr的得分parameteres像場標準(集omitNorms =真)&詞頻做(寫Solr的插件忽視它)附加代碼..

實施細則:

1)編譯如下類,放入Solr的WEB-INF/classes中


package my.package; 
import org.apache.lucene.search.DefaultSimilarity; 

public class CustomSimilarity extends DefaultSimilarity { 

public float tf(float freq) { 
    return freq > 0 ? 1.0f : 0.0f; 
} 

} 

  1. 在solrco nfig.xml使用這個新的相似性類別添加

相似性類別=「my.package.CustomSimilarity」

這一切都將幫助你做出的成績都在他們的標題相同的「DVD播放器」的文件。之後,您可以定義一個隨機類型的字段。然後,當您查詢solr時,您可以先按照評分排序,然後按隨機字段排序。由於所有包含DVD播放器的文檔的分數都是相同的,因此結果將按照隨機字段進行排列,從而爲您的產品目錄中的客戶提供更多種類的產品。

+0

嗨Suryansh 這可能是我要去的方法。我會開始研究這個,再次感謝您的幫助 - 戴夫 –

0

我沒有使用過這個,但我相信字段崩潰/分組將是你想要的。

http://wiki.apache.org/solr/FieldCollapsing

如果我正確地它會組相似的結果那種通過將類似的新聞報道http://news.google.com/是如何做的理解這個功能。

+0

感謝您的提示!不幸的是,它看起來像涉及與產品的順序混淆(我已經有了一個我想保留的評分系統)。我寧願沒有按照製造商分組結果的結果,也不希望有一種方法可以對結果進行排序,而不管組織的結果如何(這種方式會打敗組功能的目的:)我目前的產品列表頁面是產品網格,我正在尋找一個很好的豐富選擇製造商回來的基礎上的類別。 –

0

這裏有一些想法,雖然我沒有自己嘗試過。

您可以使用Carr插件Solr來對搜索結果進行聚類,然後將其提供給自定義RequestHandler以重新排序(從每個製造商羣集中挑選櫻桃)多樣性的結果。

但是,這種方法有一個缺點,您可能需要獲取大於必要的值,其次搜索結果將是合成的。

+0

因爲我沒有製造商的具體清單或者我想從製造商處獲得的具體數量的結果,我有一種感覺,這將是相當嚴格的實施方式。我喜歡胡蘿蔔的想法,儘管我可能正在研究另一個項目。謝謝你的提示! –