2016-06-28 1 views
0

Я использую два анализатора при индексировании таких как StandardAnalyzer для некоторых полей и WhitespaceAnalyzer для некоторых полей, имеющих значение как специальный символ, как c++, но я пишу запрос каккак искать регистр без учета регистра в спящем режиме с использованием запроса lucene?

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++ , поэтому я хочу получить регистрационный код для получения результатов, из-за того, что я не использую тот же анализатор при индексировании, а также в поиске, так что я ошибаюсь

plz помогите мне, потому что меня поражают с 1 недели плз .. . заранее заблаговременно

+0

общественного класс MyAnalyzer расширяет анализатор { \t \t Analyzer Анализатор = новый анализатор() { \t \t защищенного TokenStreamComponents createComponents (конечная строка ИмяПоль) { \t \t Tokenizer источника = новый WhitespaceTokenizer(); \t \t Фильтр TokenStream = новый LowerCaseAnalyzer (источник); \t \t вернуть новые компоненты TokenStreamComponents (источник, фильтр); \t \t} \t \t} } Я добавил выше код вроде как упоминалось, но я получил сообщение об ошибке, как тип MyAnalyzer должен реализовать унаследованный абстрактный метод Analyzer.tokenStream (String, Reader), так как решить ее – Santhosh

ответ

0

Вы должны использовать пользовательский анализатор и добавить LowerCaseFilter после WhitespaceTokenizer. Как это:

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 private String умение; – Santhosh

+0

вы можете подробно объяснить пример. Спасибо заранее. – Santhosh

+0

Я использую hibernate serarch 4.4.6, поэтому я использовал собственный анализатор, но он показывает, что должен реализовывать наследованный абстрактный метод Analyzer.tokenStream (String, Reader). Мой пользовательский код анализатора является открытым классом MyAnalyzer анализатор расширяет { \t анализатор анализатор = новый анализатор() { \t @Override \t защищенные TokenStreamComponents createComponents (конечная строка FIELDNAME) { \t Tokenizer источник = новый WhitespaceTokenizer(); \t Фильтр TokenStream = новый LowerCaseAnalyzer (источник); \t вернуть новые компоненты TokenStreamComponents (источник, фильтр); \t} \t} } Заранее благодарен – Santhosh

Смежные вопросы