StandardAnalyzer
рассматривайте пробел как токен, я хочу, чтобы StandardAnalyzer
не создавал токены, используя пробел в качестве токена. Итак, как я могу переопределить токенизатор StandardAnalyzer
. Если НЕТ, пожалуйста, предложите любой другой Analyzer
с примером, который не использует символ пробела в качестве токена.
Удалить символ пробела из стандартного анализатора Lucene
Ответы (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
Я использую Lucene 4.3 ->
Version.LUCENE_43
- person Junaid; 10.09.2014
И хорошо, конструктор, который вы используете в приведенном выше примере, просто устанавливает пустой список
stopWords
. Но я хочу установить список токенов...
- person Junaid; 10.09.2014
Я не хочу переопределять
Analyzer
, можете ли вы поделиться примером кода, который просто переопределяет токен Analyzer
. Я буду вам очень благодарен. :)
- person Junaid; 10.09.2014
Итак, какой смысл в обновленном ответе ... вы пытаетесь добавить новый список токенов в анализатор или что? Извините, я не могу понять суть. Не могли бы вы уточнить (лучше с хорошим примером).
- person Junaid; 11.09.2014
Ну, я заменяю StandardAnalyzer
на KeywordAnalyzer
, так что это будет использоваться для индексации и поиска... Затем в методе поиска я добавляю эти строки
parser.setDefaultOperator(Operator.AND);
if(searchWord.contains(" ")){
searchWord= searchWordreplace(" ", "?");
}
person
Junaid
schedule
16.09.2014