Как установить минимальную длину 3 в Lucene FrenchAnalyzer? - PullRequest
0 голосов
/ 26 мая 2020

Я не могу понять, как установить минимальную длину символа равной 3 во французском анализаторе Lucene, который я создаю, как показано ниже в Java:

private final FrenchAnalyzer analyzer = new FrenchAnalyzer();

Кто-нибудь знает, как это сделать?

Спасибо, Кристоф

1 Ответ

1 голос
/ 02 июня 2020

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 и получить исходный код оттуда.

Надеюсь, что это поможет.

...