2009-09-30 183 views
1

我在Lucene索引中有3條記錄。幫助需要訂購搜索結果

記錄1包含標題欄中的醫療保健。 記錄2包含描述字段中的醫療保險和保險,但不在一起。 記錄3包含公司名稱字段中的醫療保險。

當用戶搜索醫療保險,我想顯示在搜索結果中按以下順序記錄...

a.Record#3 ---因爲它包含兩個輸入一起的話( ie.as a phrase) b。記錄#1 c.記錄#2

換句話說,所有關鍵字的精確匹配應該比個別關鍵字的匹配更加重要。

我如何在lucene中實現這一點?

謝謝。

+0

記錄#1不包含一個的查詢字詞「保險」,你想它排在#2。那是對的嗎? – 2009-10-02 13:41:58

回答

1

您可以使用短語+ slop作爲bajafresh4life說的,但如果術語不是完全相反,它將無法匹配任何內容。

稍微複雜一點的替代方法是構造一個布爾查詢,明確搜索短語(帶或不帶slop)和短語中的每個術語。例如。

"healthcare insurance" OR healthcare OR insurance 

普通Lucene的相關性排序會給你想要的東西,並在途中會不會失敗,「大坡」的做法。

您還可以增強個別字段,例如,標題的權重比描述或公司名稱的權重要大。這需要一個更復雜的查詢,但爲您提供了訂購更多的控制......

title:"healthcare insurance"^2 OR title:healthcare^2 OR title:insurance^2 
OR description:"healthcare insurance" OR ... 

它可以是相當棘手的權重權,你可能有玩弄他們得到正是你想要的(例如在我剛剛給出的例子中,你可能不想提高標題的個別條款),但是當它得到它的工作時,它相當不錯:-)

1

用短語+斜率因子重寫查詢。因此,如果查詢是:

healthcare insurance 

,你可以把它改寫爲:

"healthcare insurance"~100 

有詞「醫療」和「保險」文檔更爲接近對方就會得分更高。在這種情況下,由於斜率因子爲100,所以具有兩個詞但超過100個詞的文檔將不匹配。

重寫查詢涉及在BooleanQuery中操作Term對象。採取所有條款,創建一個PhraseQuery,並設置一個斜坡因子。

+0

感謝您寶貴的意見,bajafresh4life.I會嘗試這種方法。 – 2009-10-02 02:39:03