从solr索引中剥离标点符号时出现问题 当标点符号紧跟在单词后面时,该单词没有正确编入索引。Solr:索引之前的标点符号
例如:如果我们索引“hello,John”,那么资源将不会被关键字“hello”找到,而如果我们在单词“hello”后面删除逗号,则没有问题。
是否有假设去掉标点符号的FilterFactory?有任何想法吗?
感谢, 波格丹。
从solr索引中剥离标点符号时出现问题 当标点符号紧跟在单词后面时,该单词没有正确编入索引。Solr:索引之前的标点符号
例如:如果我们索引“hello,John”,那么资源将不会被关键字“hello”找到,而如果我们在单词“hello”后面删除逗号,则没有问题。
是否有假设去掉标点符号的FilterFactory?有任何想法吗?
感谢, 波格丹。
这是用WordDelimiterFilterFactory完成的。设置generateWordParts = 1。
还有PatternTokenizerFactory可以使用,但我从来没有尝试过。
可以使用solr.PatternReplaceFilterFactory
剥离开头和结尾标点本:
<filter class="solr.PatternReplaceFilterFactory"
pattern="^\p{Punct}*(.*?)\p{Punct}*$"
replacement="$1"/>
如果你想去除所有的标点开头和结尾,除了(例如)在前面的美元符号一个字,你可以这样做:
<filter class="solr.PatternReplaceFilterFactory"
pattern="^[\p{Punct}&&[^$]]*(.*?)\p{Punct}*$"
replacement="$1"/>
我相信梅森的编辑也从根本上改变了这个答案。他应该增加另一个答案。 – CorayThan 2014-05-08 15:48:45
@CorayThan变化太激进了吗?我稍微调整了claytron原始答案中的正则表达式,因为捕获标点符号以后再扔掉它是不必要的,然后添加了一个示例,说明如果希望除去特定字符的所有标点符号,则可以进一步调整该正则表达式......这可能非常有用。对于我来说,这两者都不是完全不同的答案,所以发布它似乎不太合适。 – 2014-05-09 00:23:08
使用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>
...
对于患有边缘的情况下像我这样的:该generateWordParts = 1将正常工作,但如果你做我在做什么,也不会:我使用的是WDFF的'types'属性映射。和$给ALPHA,这样我就可以匹配像$ 10.00这样的术语。这具有导致前缀和后缀周期被包括作为该词的一部分的负面影响。所以在我的情况下,@claytron的答案可能更适合。 – 2014-05-08 15:34:52