代码之家  ›  专栏  ›  技术社区  ›  Bogdan Gusiev

Solr:在索引前去掉标点符号

  •  5
  • Bogdan Gusiev  · 技术社区  · 16 年前

    我对从solr索引中删除标点符号有问题 当标点符号紧跟在一个单词后面时,这个单词就没有正确的索引。

    例如:如果索引“hello,John”,则关键字“hello”找不到资产,而如果删除单词“hello”后的逗号,则不会出现问题。

    有没有过滤工厂可以去掉标点符号?有什么想法吗?

    博格丹。

    3 回复  |  直到 16 年前
        1
  •  7
  •   Mason G. Zhwiti    12 年前

    你可以使用 solr.PatternReplaceFilterFactory 要用此分隔开头和结尾的标点符号,请执行以下操作:

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

    如果你想去掉开头和结尾的所有标点符号,除了(例如)一个单词前面的美元符号,你可以使用这个:

    <filter class="solr.PatternReplaceFilterFactory"
        pattern="^[\p{Punct}&&[^$]]*(.*?)\p{Punct}*$"
        replacement="$1"/>
    
        2
  •  6
  •   Pascal Dimassimo    16 年前

    这是通过WordDelimiterFilterFactory完成的。设置generateWordParts=1。

    PatternTokenizerFactory 那是可以用的,但我从来没有试过。

        3
  •  0
  •   zaki benz    13 年前

    使用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>
    

    ...