2010-12-07 77 views
6

我尋找「產品文檔」排序前限制由得分。換句話說,我的solr文件是產品記錄。我想獲得針對查詢的前50個匹配產品。然後,我希望能夠按名稱或價格對前50個得分文檔進行排序。我沒有看到如何做到這一點,因爲按分數排序,然後按名稱或價格將無法真正幫助,因爲分數是浮動的。我怎麼能在一個Solr的查詢

我不介意我可以做一些事情,比如將分數映射到範圍(比如8.0-8.99的分數會進入8分桶評分),然後按範圍,然後按名稱排序,但由於存在基本上沒有進球規範化,這仍然會讓事情變得更加困難。

文藝青年最愛的我如何排除Solr的結果低分排序文件之前設置?

回答

3

您可以使用frange實現這一點,只要你不想排序得分(在這種情況下我想你可以在客戶端進行過濾)。

您所查詢的是沿着線的東西:

q={!frange l=5}query($qq)&qq=[awesome product]&sort=price asc 

在Q-FRANGE參數,以較低的-l參數勢必要篩選得分,並將其替換QQ的參數你用戶查詢。

+0

謝謝,因爲我可以從第一次得到一個合理的範圍,結果顯示按照分數排序,這很好! – Zak 2010-12-09 18:40:21

0

我不認爲你可以簡單地

排除來自 Solr的低分排序文件

因爲相關性得分僅用於搜索查詢的給定組合有意義之前結果集並生成文檔列表。即分數僅在給定搜索中有意義,並且您無法爲所有搜索設置一些閾值。

如果您在使用Java(或PHP),你可以得到的前50個文件,然後重新排序程序語言的這個名單,但我不認爲你可以只用SOLR做到這一點。

無論如何,我會建議你不要再對結果排序的這條路線從SOLR下去,因爲它只會迷惑用戶。人們希望搜索結果像谷歌(以及大多數其他搜索引擎),其結果以某種形式返回到TFIDF排名。

說了這麼多之後,您可以使用一些其他標準來分隔具有相同相關性分數的文檔,方法是根據價格範圍比例添加index-time boost因子。

我建議你使用SOLR自己的優勢和使用方面。在左側提供價格範圍(如Ebay,Amazon等)和/或產品類別方面等。還提供「排序」小工具,以便按照產品名稱對結果進行排序,如果用戶想要它。

[編輯]這個問題也可能是有用的:

Digg-like search result ranking with Lucene/Solr?

0

如通過卡爾·約翰森觀察到,可以做在客戶端的過濾:加載第50行的響應(由評分降序排序),然後操縱它們在JS例如。

jQuery DataTables plugin非常適合這樣的事情:對多列進行排序,排序,動態過濾等等 - 只有50行也會非常快,因此用戶可以通過排序「玩」並過濾,直到他們找到他們想要的東西。