2011-02-17 54 views
0

我試圖用MultiFieldQueryParser執行以下搜索:使用Lucene MultiFieldQueryParser多個必填字段

內容:你好世界的優先級:高

即,我只希望看到的文檔返回其包含單詞'hello'和'world',並且優先級爲'高'。 MultiFieldQueryParser的默認行爲似乎返回包含內容的任何內容:hello world OR priority:high - 我無法弄清楚如何改變它。

有什麼建議嗎?

+0

可能重複(http://stackoverflow.com/questions/450547/how-to-make-lucene-match - 全詞-在查詢) – 2011-02-18 14:05:32

回答

1

當您想跨多個字段搜索一個術語時,使用MultiFieldQuery。你正在尋找的是一個簡單的布爾查詢和兩個子句。一個查詢如下應該工作。

+(+contents:hello +contents:world) +priority:high 

這裏有一個布爾查詢一起Occur.MUST一個條款是,反過來,一個布爾查詢兩個子句,另一個是詞語查詢。

0

您可以通過setDefaultOperator方法爲解析器設置默認運算符。

一個例子:[?如何使Lucene的比賽中查詢所有的字]

... 
Analyzer userTermsAnalyzer = searchFactory.getAnalyzer(MyEntity.class); 
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_CURRENT, new String[]{"text"}, userTermsAnalyzer); 
queryParser.setDefaultOperator(QueryParser.Operator.AND); 
Query taskQuery = queryParser.parse("contents:hello world priority:high");