所以我对 Solr 很陌生,但我尝试使用 PatternReplaceCharFilterFactory 对将存储的电话号码字符串进行一些预处理。这是该字段的配置:
<fieldType name="phone_number" class="solr.TextField" >
<analyzer>
<charFilter class="solr.PatternReplaceCharFilterFactory"
pattern="\(?(\d{3})?\)?[-. ]?(\d{3})[-. ]?(\d{4})"
replaceWith="$1-$2-$3"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>
</fieldType>
我已经测试了正则表达式,它与我期望的所有内容匹配(例如 555.444.1234、(555) 444-1234、5554441234、4441234、444-1234 等)。
现在我的理解是,正则表达式应该匹配传递给它的内容,并将其替换为指定的模式。因此,如果他们传递给我 555.123.4444,我希望它会导致 555-123-4444 传递给 StandardTokenizerFactory。从那里它将被分解为代币 555,123,4444。
鉴于我在这方面花费了多少时间,我确信我遗漏了一个小配置问题,但从可用的文档(我已经看到)中我不知道它是什么。
先感谢您。
好吧,经过一次“幸运”的谷歌搜索后我发现了这个链接Solr 过滤器:PatternReplaceCharFilter http://java.dzone.com/news/solr-filters在最底部,他们讨论了高级参数,我认为这更好地解释了过滤器的实际工作原理:
CharFilter 对单个字符进行操作,模式匹配需要内部缓冲区来读取更多字符。 MaxBlockChars 允许您指定缓冲区的大小。
我的问题是它读取的是单个字符而不是整个字符串。这与我看到的示例相反。所以解决方案是在我的 charFilter 上添加 MaxBlockChar 属性,瞧,它起作用了。 LucidImagination 的网站和 solr wiki(我遇到的)上都没有提到这个属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)