FrenchAnalyzer
объявлен окончательным, поэтому не может быть расширен. Я бы обошел это, скопировав источник и добавив LengthFilter
к копии.
Шаги следующие (при условии, что вы используете последнюю версию Lucene):
1) Получите копию исходного класса с GitHub здесь .
2) Переименуйте класс соответствующим образом (например, CustomFrenchAnalyzer
) и соответствующим образом измените все конструкторы класса.
3) Добавьте следующий импорт:
import org.apache.lucene.analysis.miscellaneous.LengthFilter;
4) В методах createComponents
и normalize
добавьте новый фильтр длины. Например, если вы хотите удалить слова, длина которых меньше 3 символов, в соответствии с вашим вопросом:
@Override
protected TokenStream normalize(String fieldName, TokenStream in) {
TokenStream result = new ElisionFilter(in, DEFAULT_ARTICLES);
result = new LowerCaseFilter(result);
// the following line is added:
result = new LengthFilter(result, 3, 9999);
return result;
}
Сделайте то же самое для метода createComponents
.
Таким образом , ваш пользовательский класс автоматически воспользуется преимуществами других функций, встроенных в French Analyzer:
- французский фильтр исключения
- набор французских по умолчанию стоп-слова (в комплекте с Lucene JAR).
- и т. д.
И при необходимости он может быть построен с использованием любых непустых конструкторов анализатора.
Если вы не используете совместимую версию Lucene, вам придется отследить соответствующую ветку Git или загрузить исходный JAR-файл со страницы загрузки Lucene и получить исходный код оттуда.
Надеюсь, что это поможет.