2016-06-28 27 views
0

我使用的兩個檢編入索引時,如StandardAnalyzer一些領域和WhitespaceAnalyzer對於某些字段,拿着價值像c++特殊字符,但我寫查詢作爲如何在使用lucene查詢的hibernate搜索中搜索不區分大小寫的情況?

QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Professional.class).get(); 
BooleanQuery booleanQuery = new BooleanQuery(); 

query = qb .keyword().wildcard().onField(fieldName).ignoreFieldBridge().matching(fieldValue+"*").createQuery(); 
booleanQuery.add(query, BooleanClause.Occur.MUST); 

上面的查詢返回結果是區分大小寫不同像C++和C++ ,所以我想對於結果acheive情況下鈍感,因爲當索引以及搜索我沒有使用相同的分析,所以我錯了

plz幫助我,因爲我有1個PLZ strucked .. 。 在此先感謝

+0

公共類MyAnalyzer延伸分析器{ \t \t分析器分析器=新分析器(){ \t \t保護TokenStreamComponents的createComponents(最終字符串fieldName的){ \t \t標記生成器源=新WhitespaceTokenizer(); \t \t TokenStream filter = new LowerCaseAnalyzer(source); \t \t返回新的TokenStreamComponents(source,filter); \t \t} \t \t} }我上面的代碼中添加提到喜歡,但我得到喜歡的類型MyAnalyzer必須實現繼承的抽象方法Analyzer.tokenStream(字符串,閱讀器)錯誤,以便如何解決它 – Santhosh

回答

0

您應該使用自定義分析器並在WhitespaceTokenizer之後添加LowerCaseFilter。像這樣:

Analyzer analyzer = new Analyzer() { 
    @Override 
    protected TokenStreamComponents createComponents(final String fieldName) { 
     Tokenizer source = new WhitespaceTokenizer(); 
     TokenStream filter = new LowerCaseAnalyzer(source); 
     return new TokenStreamComponents(source, filter); 
    } 
} 
+0

感謝您的答覆,如何使用你的代碼,以及我把這些代碼放在哪個地方,plz幫助我,因爲我使用了@Analyzer註解(impl = WhitespaceAnalyzer.class) \t @Field \t private String skill; – Santhosh

+0

你能詳細解釋一下例子嗎先謝謝 – Santhosh

+0

我使用hibernate serarch 4.4.6所以我用了自定義分析器但是它顯示必須實現繼承的抽象方法Analyzer.tokenStream(String,Reader)我的自定義分析器代碼是public class MyAnalyzer延伸分析器{ \t分析器分析器=新分析器(){ \t @覆蓋 \t保護TokenStreamComponents的createComponents(最終字符串fieldName的){ \t標記生成器源=新WhitespaceTokenizer(); \t TokenStream filter = new LowerCaseAnalyzer(source); \t返回新的TokenStreamComponents(source,filter); \t} \t} }提前致謝 – Santhosh