我遇到了从solr索引中去除标点符号的问题 当标点符号紧跟在单词后面时,则该单词未正确索引。
例如:如果我们索引“hello,John”,则不会通过关键字“hello”找到资产,而如果我们在单词“hello”之后删除逗号则没有问题。
是否有任何FilterFactory假设剥离标点符号?有什么想法吗?
谢谢, 波格丹。
答案 0 :(得分:7)
您可以使用solr.PatternReplaceFilterFactory
删除开头和尾随标点符号:
<filter class="solr.PatternReplaceFilterFactory"
pattern="^\p{Punct}*(.*?)\p{Punct}*$"
replacement="$1"/>
如果你想在开头和结尾删除所有标点符号,除了(例如)单词前面的美元符号,你可以使用它:
<filter class="solr.PatternReplaceFilterFactory"
pattern="^[\p{Punct}&&[^$]]*(.*?)\p{Punct}*$"
replacement="$1"/>
答案 1 :(得分:6)
这是通过WordDelimiterFilterFactory完成的。设置generateWordParts = 1。
还可以使用PatternTokenizerFactory,但我从未尝试过。
答案 2 :(得分:0)
使用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>
...