2016-10-18 7 views
0

У меня есть запись Lucene так:Как создать составные жетоны в lucene 6 на основе пробелов?

«учащенное сердцебиение»

Когда я сталкиваюсь текст «увеличился HeartRate» Я хочу, чтобы соответствовать этой записи в индексе. Это означает, что мне необходимо подписать этот вход:

{increased, heart, rate} 
{increasedheart, rate} 
{increased, heartrate} 

Как это сделать с помощью lucene 6+?

Сердечные приветы

ответ

0

Вот как я это сделал, открыты для предложений:

public class MyAnalyzer extends Analyzer { 


    public MyAnalyzer() { 
    super(); 
    } 

    @Override 
    protected TokenStreamComponents createComponents(String fieldName) { 

    final Tokenizer src = new WhitespaceTokenizer(); 
    TokenStream tok = new LowerCaseFilter(src); 
    tok = new HyphenatedWordsFilter(tok); 
    tok = getStopFilter(tok); 
    ShingleFilter filter = new ShingleFilter(tok, 2); 
    filter.setTokenSeparator(""); 
    tok = filter; 

    return new TokenStreamComponents(src, tok) { 
     @Override 
     protected void setReader(final Reader reader) { 
     super.setReader(reader); 
     } 
    }; 
    } 

} 

Обратите внимание на ShingleFilter, и использование лексемы метода установки сепаратора.