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>
...