2013-03-05 105 views
0

上午使用Apache Lucene搜索與我的Java應用程序。查詢建立在搜索國家代碼(通常以兩個字母的單詞,例如 - IN - 印度,美國 - 英國 - 英國等)的人名(字母)搜索Apache Lucene搜索 - 關鍵字失敗 - IN

然而問題出現了,當我嘗試用查詢條件查詢值爲字母=「Steve」和國家=「IN」時,即使記錄存在,搜索查詢結果也沒有值,只有當國家被選爲IN時(印度)

alphabet = alphabet.trim() + "*"; 
query = new QueryParser(Version.LUCENE_30, searchFor[0], analyzer).parse(alphabet.trim()); 
mainQuery.add(query, BooleanClause.Occur.MUST); 
} 
if ((country != null) && (country.trim().length() > 0)) { 
query = new QueryParser(Version.LUCENE_30, searchFor[1], analyzer).parse(country.trim()); 
mainQuery.add(query, BooleanClause.Occur.MUST); 
} 
+1

您正在使用哪種分析儀?一些分析儀可能會認爲IN是一個停用詞,因此將其丟棄。 – 2013-03-05 08:13:23

+0

嗨Emanuuele Bezzi,我正在使用Apache Lucene Core 3.0,如何編輯StopAnalyzer,java來編輯STOP WORDS,我是否需要手動反編譯jar中的所有類文件並編輯和編譯? – user2104391 2013-03-05 08:35:11

回答

1

你想使用KeywordAnalyzer來處理諸如國家代碼(不需要標記或大小寫/停用詞摺疊)的東西;對於人名而言,WhitespaceAnalyzer可能是一個不錯的選擇。 PerFieldAnalyzerWrapper將兩者結合起來。例如:

Analyzer ka = new KeywordAnalyzer(Version.LUCENE_30) 
Analyzer wa = new WhitespaceAnalyzer(Version.LUCENE_30) 
PerFieldAnalyzerWrapper wrapper = 
     new PerFieldAnalyzerWrapper(ka); 
wrapper.addAnalyzer("countrycode", ka); 

現在只需創建一個使用wrapperIndexWriter

+1

嗨,我解決了這個問題,只是通過一個空的哈希集合StandardAnalyzer.java Set set1 = new HashSet(); analyzer = new StandardAnalyzer(Version.LUCENE_30,set1); – user2104391 2013-03-06 14:13:25