Solr:在索引之前剥离标点符号

时间:2010-06-30 13:48:12

标签: solr indexing punctuation filterfactory

我遇到了从solr索引中去除标点符号的问题 当标点符号紧跟在单词后面时,则该单词未正确索引。

例如:如果我们索引“hello,John”,则不会通过关键字“hello”找到资产,而如果我们在单词“hello”之后删除逗号则没有问题。

是否有任何FilterFactory假设剥离标点符号?有什么想法吗?

谢谢, 波格丹。

3 个答案:

答案 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>

...