Solr: полоса пунктуации перед указателем

У меня проблема с зачеркиванием знаков препинания из индекса solr. Когда знак пунктуации следует сразу за словом, это слово не индексируется должным образом.

Например: если мы индексируем "привет, Джон", ресурс не будет найден по ключевому слову "привет", в то время как при удалении запятой после слова "привет" проблем не будет.

Есть ли FilterFactory, который предполагает удаление знаков препинания? Есть идеи?

Спасибо, Богдан.

3 ответа

Вы можете использовать solr.PatternReplaceFilterFactory убрать начальную и конечную пунктуацию следующим образом:

<filter class="solr.PatternReplaceFilterFactory"
    pattern="^\p{Punct}*(.*?)\p{Punct}*$"
    replacement="$1"/>

И если вы хотите убрать все знаки препинания в начале и в конце, кроме (например) знака доллара перед словом, вы можете использовать это:

<filter class="solr.PatternReplaceFilterFactory"
    pattern="^[\p{Punct}&&[^$]]*(.*?)\p{Punct}*$"
    replacement="$1"/>

Это делается с помощью WordDelimiterFilterFactory. Установите generateWordParts=1.

Существует также PatternTokenizerFactory, который можно использовать, но я никогда не пробовал.

Используйте PatternReplaceFilterFactory

<!-- remove punctuation -->
    <filter class="solr.PatternReplaceFilterFactory" pattern="^(\p{Punct}*)(.*?)(\p{Punct}*)$" replacement="$2"/>
    <filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StandardFilterFactory"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>

...

Другие вопросы по тегам