【问题标题】:Solr: strip punctuation before indexSolr:在索引前去除标点符号
【发布时间】:2011-03-10 03:44:03
【问题描述】:

我在从 solr 索引中删除标点符号时遇到问题 如果标点符号紧跟在一个单词之后,则该单词没有被正确索引。

例如:如果我们索引“hello, John”,那么关键字“hello”将不会找到该资产,而如果我们删除“hello”后的逗号则没有问题。

是否有任何 FilterFactory 可以去除标点符号?有什么想法吗?

谢谢, 波格丹。

【问题讨论】:

    标签: solr indexing punctuation filterfactory


    【解决方案1】:

    您可以使用solr.PatternReplaceFilterFactory 去掉开头和结尾的标点符号:

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

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

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

    【讨论】:

    • 我相信 Mason 的编辑彻底改变了这个答案。他应该再补充一个答案。
    • @CorayThan 改变如何过于激进?我稍微调整了claytron原始答案上的正则表达式,因为捕获标点符号只是为了稍后将其丢弃是不必要的,然后添加了一个示例,说明如何进一步调整该正则表达式,如果一个人希望删除除特定字符之外的所有标点符号......这可能非常有用。对我来说,两者似乎都不是一个完全不同的答案,所以这样发布似乎不正确。
    【解决方案2】:

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

    还有PatternTokenizerFactory可以用,不过没试过。

    【讨论】:

    • 对于像我这样有边缘情况的人: generateWordParts=1 通常可以工作,但如果你正在做我正在做的事情,它不会:我正在使用 types 属性的 WDFF 映射。和 $ 到 ALPHA,这样我就可以匹配像 $10.00 这样的术语。这具有导致前缀和后缀句点被包含在单词中的负面影响。所以就我而言,@claytron 的答案可能更合适。
    【解决方案3】:

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

    ...

    【讨论】:

      猜你喜欢
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 2012-02-10
      • 2021-03-18
      • 1970-01-01
      • 2014-01-01
      • 2013-06-10
      相关资源
      最近更新 更多