2010-06-30 60 views
5

从solr索引中剥离标点符号时出现问题 当标点符号紧跟在单词后面时,该单词没有正确编入索引。Solr:索引之前的标点符号

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

是否有假设去掉标点符号的FilterFactory?有任何想法吗?

感谢, 波格丹。

回答

6

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

还有PatternTokenizerFactory可以使用,但我从来没有尝试过。

+0

对于患有边缘的情况下像我这样的:该generateWordParts = 1将正常工作,但如果你做我在做什么,也不会:我使用的是WDFF的'types'属性映射。和$给ALPHA,这样我就可以匹配像$ 10.00这样的术语。这具有导致前缀和后缀周期被包括作为该词的一部分的负面影响。所以在我的情况下,@claytron的答案可能更适合。 – 2014-05-08 15:34:52

6

可以使用solr.PatternReplaceFilterFactory剥离开头和结尾标点本:

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

如果你想去除所有的标点开头和结尾,除了(例如)在前面的美元符号一个字,你可以这样做:

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

我相信梅森的编辑也从根本上改变了这个答案。他应该增加另一个答案。 – CorayThan 2014-05-08 15:48:45

+0

@CorayThan变化太激进了吗?我稍微调整了claytron原始答案中的正则表达式,因为捕获标点符号以后再扔掉它是不必要的,然后添加了一个示例,说明如果希望除去特定字符的所有标点符号,则可以进一步调整该正则表达式......这可能非常有用。对于我来说,这两者都不是完全不同的答案,所以发布它似乎不太合适。 – 2014-05-09 00:23:08

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> 

...