Фильтр графика синонимов Solr не работает после другого фильтра - PullRequest
1 голос
/ 29 января 2020

Я пытаюсь преобразовать 15.6" поисков в 15.6 inch. Идея состояла в том, чтобы сначала заменить 15.6" на 15.6 ", а затем сопоставить " с правилом синонима " => inch. Я создал определение типа:

<fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
        <tokenizer class="solr.WhitespaceTokenizerFactory" />
        <filter class="solr.PatternReplaceFilterFactory" pattern='^([0-9]+([,.][0-9]+)?)(")$' replacement="$1 $3" />
        <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" />
    </analyzer>
</fieldType>

, но оно не работает! Если я ввожу 15.6", я получаю 15.6 ", но когда я ввожу 15.6 ", я получаю то, что хочу - 15.6 inch.

Почему это не работает? Я что-то упустил?

РЕДАКТИРОВАТЬ:

Анализ Solr: Not working

Working

1 Ответ

2 голосов
/ 29 января 2020

Проблема в том, что 15.6 " по-прежнему остается единственным токеном после фильтра замены шаблона - простое создание токена с пробелом в нем не разделит его.

Вы можете видеть, что он по-прежнему хранится как один токен, так как на линии нет | (который разделяет токены).

Добавьте после него фильтр разделителя слов (из вашей цепочки анализа кажется, что он у вас уже есть, он просто не включен в ваш вопрос), или, лучше, сделайте замену в PatternReplaceCharFilterFactory перед токенизатор получает задачу разбить входные данные на отдельные токены:

<analyzer>
  <charFilter class="solr.PatternReplaceCharFilterFactory" pattern='^([0-9]+([,.][0-9]+)?)(")$' replacement="$1 $3" />
  <tokenizer ...>

Возможно, вам придется немного помассировать сопоставление с образцом (то есть потерять ^ и $, которые не соблюдаются Solr в любом случае, iir c) в зависимости от вашего ввода (поскольку теперь оно будет применено ко всей входной строке - убедитесь, что «Macbook 15.6» 256 ГБ сопоставлено произвольно).

...