2013-10-05 100 views
2

Lucene的短語查詢假設我有具有場文本如下5號文件:與條款或

  1. 紅房子是美麗
  2. 房子是小
  3. 紅色的魚
  4. 紅色和黃色的房子很大

我應該使用什麼樣的查詢來檢索文檔,以便如果我搜索「re d之家「:

  1. 紅房子是美麗的,大[匹配:紅房子]
  2. 紅色和黃色的房子大[匹配:紅XX房子]
  3. 房子少[匹配:房子]
  4. 紅色魚[匹配:紅色]

我需要的是對與我搜索過的詞組相匹配的文檔給出高排名,並且對僅搜索詞組的一部分的文檔給出較低分數。 請注意,字符串查詢也可能包含2個以上的術語。

它就像一個PhraseQuery,其中每個術語可以出現或不出現,並且其中術語越靠近術語,得分越高。

我試過用TermQuery來組合一個PhraseQuery,但結果並不是我所需要的。

我該怎麼辦?

由於

回答

1

嘗試創建TermQuery對象,用OR(BooleanClause.Occur.SHOULD)組合構成BooleanQuery。這將匹配只有一個詞出現的文檔,但應該給出兩者都出現的分數。

Query term1 = new TermQuery(new Term("text", "red")); 
Query term2 = new TermQuery(new Term("text", "house")); 
BooleanQuery booleanQuery = new BooleanQuery(); 
booleanQuery.add(term1, BooleanClause.Occur.SHOULD); 
booleanQuery.add(term2, BooleanClause.Occur.SHOULD); 
+1

使用簡單的布爾查詢,您不能利用術語的位置來構建PhraseQuery,而且您也不能考慮術語之間的差異。 –

0

我認爲PhraseQuery 與一個正setSlope,與每個任期TermQuery應該-相結合,應該讓你那裏。也許用一個提升爲PhraseQuery。

我試過使用TermQuery來編寫PhraseQuery,但 結果不是我所需要的。

你怎麼處理這個組合獲得,以及它如何是不是你需要什麼?