我在从 solr 索引中删除标点符号时遇到问题当标点符号紧跟在一个单词之后,则该单词没有正确索引。
例如:如果我们索引“hello, John”,则通过关键字“hello”将找不到资产,而如果我们删除单词“hello”后的逗号则不会有问题。
是否有任何 FilterFactory 假设去除标点符号?有任何想法吗?
谢谢,博格丹。
我在从 solr 索引中删除标点符号时遇到问题当标点符号紧跟在一个单词之后,则该单词没有正确索引。
例如:如果我们索引“hello, John”,则通过关键字“hello”将找不到资产,而如果我们删除单词“hello”后的逗号则不会有问题。
是否有任何 FilterFactory 假设去除标点符号?有任何想法吗?
谢谢,博格丹。
您可以使用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>
...