Удалить символ пробела из стандартного анализатора Lucene

StandardAnalyzer рассматривайте пробел как токен, я хочу, чтобы StandardAnalyzer не создавал токены, используя пробел в качестве токена. Итак, как я могу переопределить токенизатор StandardAnalyzer. Если НЕТ, пожалуйста, предложите любой другой Analyzer с примером, который не использует символ пробела в качестве токена.


person Junaid    schedule 10.09.2014    source источник


Ответы (2)


Этот код может помочь вам:

Analyzer ana = new StandardAnalyzer(LUCENE_30, Collections.emptySet());

Обратите внимание, что ответ зависит от версии. Для Lucene 4.0 используйте:

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_40, CharArraySet.EMPTY_SET);

Изменить:

Создает StandardTokenizer, отфильтрованный с помощью StandardFilter, org.apache.lucene.analysis.LowerCaseFilter и org.apache.lucene.analysis.StopFilter.

@Override
public TokenStream tokenStream(String fieldName, Reader reader) {
   StandardTokenizer tokenStream = new StandardTokenizer(matchVersion, reader);
    tokenStream.setMaxTokenLength(maxTokenLength);
    TokenStream result = new StandardFilter(tokenStream);
    result = new LowerCaseFilter(result);
    result = new StopFilter(enableStopPositionIncrements, result, stopSet);
    return result;
}

private static final class  SavedStreams {
        StandardTokenizer tokenStream;
        TokenStream filteredTokenStream;
}
person stacky    schedule 10.09.2014
comment
Я использую Lucene 4.3 -> Version.LUCENE_43 - person Junaid; 10.09.2014
comment
И хорошо, конструктор, который вы используете в приведенном выше примере, просто устанавливает пустой список stopWords. Но я хочу установить список токенов... - person Junaid; 10.09.2014
comment
Я не хочу переопределять Analyzer, можете ли вы поделиться примером кода, который просто переопределяет токен Analyzer. Я буду вам очень благодарен. :) - person Junaid; 10.09.2014
comment
Итак, какой смысл в обновленном ответе ... вы пытаетесь добавить новый список токенов в анализатор или что? Извините, я не могу понять суть. Не могли бы вы уточнить (лучше с хорошим примером). - person Junaid; 11.09.2014

Ну, я заменяю StandardAnalyzer на KeywordAnalyzer, так что это будет использоваться для индексации и поиска... Затем в методе поиска я добавляю эти строки

parser.setDefaultOperator(Operator.AND);
if(searchWord.contains(" ")){
    searchWord= searchWordreplace(" ", "?");
}
person Junaid    schedule 16.09.2014