Фильтр Solr для точек / периодов, если он не начинается с некоторой фразы - PullRequest
2 голосов
/ 10 мая 2019

Мне интересно, как я могу заменить точки [.] при индексации данных в solr.

За исключением , я хочу сохранить слова, начинающиеся с определенных фраз, как целые токены.

Например,

word.phrase следует индексировать как два ключевых слова: word, phrase

Но я хочу, чтобы что-либо с префиксом item. не делилось на периоды, чтобы:

item.name должно быть проиндексировано как одно ключевое слово: item.name

Я пробую эти фильтры / токенизаторы, но все еще не повезло, и я думаю, что мое регулярное выражение является виновником:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
      <charFilter class="solr.PatternReplaceCharFilterFactory" 
            pattern="[^(item)]\." replacement=" " />
      <tokenizer class="solr.StandardTokenizerFactory"/>
  </analyzer>
</fieldType>

1 Ответ

1 голос
/ 11 мая 2019

Чтобы соответствовать "foo" только в том случае, если ему не предшествует "bar", вашему регулярному выражению требуется отрицательное выражение взгляда за .

Следующее регулярное выражение соответствует точкам, которым не предшествует "item": (?<!\bitem)\..
В schema.xml шаблон должен быть экранирован xml для правильного анализа, поэтому < становится &lt;:

pattern="(?&lt;!\bitem)\."

В качестве альтернативы вы могли бы использовать фильтр (помещенный после токенизатор) вместо charfilter.

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