2016-06-28 24 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