我在Lucene索引中有3條記錄。幫助需要訂購搜索結果
記錄1包含標題欄中的醫療保健。 記錄2包含描述字段中的醫療保險和保險,但不在一起。 記錄3包含公司名稱字段中的醫療保險。
當用戶搜索醫療保險,我想顯示在搜索結果中按以下順序記錄...
a.Record#3 ---因爲它包含兩個輸入一起的話( ie.as a phrase) b。記錄#1 c.記錄#2
換句話說,所有關鍵字的精確匹配應該比個別關鍵字的匹配更加重要。
我如何在lucene中實現這一點?
謝謝。
我在Lucene索引中有3條記錄。幫助需要訂購搜索結果
記錄1包含標題欄中的醫療保健。 記錄2包含描述字段中的醫療保險和保險,但不在一起。 記錄3包含公司名稱字段中的醫療保險。
當用戶搜索醫療保險,我想顯示在搜索結果中按以下順序記錄...
a.Record#3 ---因爲它包含兩個輸入一起的話( ie.as a phrase) b。記錄#1 c.記錄#2
換句話說,所有關鍵字的精確匹配應該比個別關鍵字的匹配更加重要。
我如何在lucene中實現這一點?
謝謝。
您可以使用短語+ 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 ...
它可以是相當棘手的權重權,你可能有玩弄他們得到正是你想要的(例如在我剛剛給出的例子中,你可能不想提高標題的個別條款),但是當它得到它的工作時,它相當不錯:-)
用短語+斜率因子重寫查詢。因此,如果查詢是:
healthcare insurance
,你可以把它改寫爲:
"healthcare insurance"~100
有詞「醫療」和「保險」文檔更爲接近對方就會得分更高。在這種情況下,由於斜率因子爲100,所以具有兩個詞但超過100個詞的文檔將不匹配。
重寫查詢涉及在BooleanQuery
中操作Term對象。採取所有條款,創建一個PhraseQuery
,並設置一個斜坡因子。
感謝您寶貴的意見,bajafresh4life.I會嘗試這種方法。 – 2009-10-02 02:39:03
記錄#1不包含一個的查詢字詞「保險」,你想它排在#2。那是對的嗎? – 2009-10-02 13:41:58