Solr PatternReplaceCharFilterFactory не заменяется указанным шаблоном - PullRequest
7 голосов
/ 15 декабря 2011

Итак, я новичок в Solr, но я пытаюсь использовать PatternReplaceCharFilterFactory, чтобы выполнить некоторую предварительную обработку строки телефонного номера, которая будет сохранена. Вот конфигурация для поля:

<fieldType name="phone_number" class="solr.TextField" >
  <analyzer>
  <charFilter class="solr.PatternReplaceCharFilterFactory"
              pattern="\(?(\d{3})?\)?[-. ]?(\d{3})[-. ]?(\d{4})"
              replaceWith="$1-$2-$3"/>
   <tokenizer class="solr.StandardTokenizerFactory"/>
  </analyzer>
</fieldType>

Я проверил регулярное выражение, и оно соответствует всем ожиданиям (например, 555.444.1234, (555) 444-1234, 5554441234, 4441234, 444-1234 и т. Д.).

Теперь я понимаю, что регулярное выражение должно соответствовать тому, что ему передано, и заменять его указанным шаблоном. Поэтому, если они передадут мне 555.123.4444, я ожидаю, что в результате 555-123-4444 будет передан StandardTokenizerFactory. Оттуда он будет разбит на токены 555,123,4444.

Учитывая, сколько времени я потратил на это, я уверен, что есть небольшая проблема конфигурации, которую я пропускаю, но из доступной документации (которую я видел), я понятия не имею, что это такое.

Заранее спасибо.

1 Ответ

6 голосов
/ 16 декабря 2011

ОК, так что я понял это после еще одного «счастливого» поиска в Google. Я наткнулся на эту ссылку Фильтры Solr: PatternReplaceCharFilter и в самом низу они обсуждают Расширенные параметры, которые, я думаю, лучше объясняют, как фильтр на самом деле работы:

CharFilter работает с одним символом, а для сопоставления с образцом требуется внутренний буфер для чтения дополнительных символов. MaxBlockChars позволяет указать размер буфера.

Моя проблема в том, что он читает один символ, а не всю строку. Это противоречило приведенным мной примерам. Таким образом, решение было на моем charFilter, я добавил атрибут MaxBlockChar и вуаля, он работает. Не было никакого упоминания об этом атрибуте ни на сайте LucidImagination, ни в solr wiki (с которым я сталкивался).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...