Solr:在索引前去除标点符号
Posted
技术标签:
【中文标题】Solr:在索引前去除标点符号【英文标题】:Solr: strip punctuation before index 【发布时间】:2011-03-10 03:44:03 【问题描述】:我在从 solr 索引中删除标点符号时遇到问题 如果标点符号紧跟在一个单词之后,则该单词没有被正确索引。
例如:如果我们索引“hello, John”,那么关键字“hello”将不会找到该资产,而如果我们删除“hello”后的逗号则没有问题。
是否有任何 FilterFactory 可以去除标点符号?有什么想法吗?
谢谢, 波格丹。
【问题讨论】:
【参考方案1】:您可以使用solr.PatternReplaceFilterFactory
去掉开头和结尾的标点符号:
<filter class="solr.PatternReplaceFilterFactory"
pattern="^\pPunct*(.*?)\pPunct*$"
replacement="$1"/>
如果你想去掉开头和结尾的所有标点符号,除了(例如)单词前面的美元符号,你可以使用这个:
<filter class="solr.PatternReplaceFilterFactory"
pattern="^[\pPunct&&[^$]]*(.*?)\pPunct*$"
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="^(\pPunct*)(.*?)(\pPunct*)$" replacement="$2"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
...
【讨论】:
以上是关于Solr:在索引前去除标点符号的主要内容,如果未能解决你的问题,请参考以下文章