2011-07-23 13 views

回答

3

使用StandardAnalyzerWhitespaceAnalyzer都有同樣的問題。他們會將「WHO-S-09-0003」編入索引,這意味着當您執行搜索時,只有在搜索字詞中使用連字符時纔會起作用。 解決您的問題的一種方法是實現您自己的TokenFilter,它可以檢測代碼的格式並在編制索引期間刪除連字符。您可以使用AnayzerDef構建一個toekn過濾器鏈和一個整體定製分析器。當然,你將不得不在搜索時使用相同的分析器,但Hibernate搜索查詢DSL將處理這個問題。

0

其實你可以實現自己的方法,像這樣的:

private String specialCharacters(String keyword) { 
    String [] specialChars = {"-","!","?"}; 

    for(int i = 0; i < specialChars.length; i++) 
     if(keyword.indexOf(specialChars[i]) > -1) 
      keyword = keyword.replace(specialChars[i], "\\"+specialChars[i]); 

    return keyword; 
} 

正如你所知道的Lucene有特殊字符,所以如果你想逃避特殊字符應該比你那個字符雙反斜線前插入...