所以我在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。
考虑到我花了多少时间在这上面,我确信有一个小的配置问题我缺少但是从可用的文档(我已经看到)我不知道它是什么。
提前谢谢。
答案 0 :(得分:6)
好的,所以我在经过一次'幸运'谷歌搜索后发现了这个链接Solr filters: PatternReplaceCharFilter,最底层他们讨论了高级参数,我认为更好地解释了过滤器的实际工作原理:
CharFilter对单个字符进行操作,模式匹配需要内部缓冲区来读取更多字符。 MaxBlockChars允许您指定缓冲区的大小。
我的问题是它在单个字符中读取而不是整个字符串。这与我看到的例子相反。所以解决方案是在我的charFilter上我添加了MaxBlockChar属性并且它有效。在LucidImagination的网站上和solr wiki上都没有提到这个属性(我遇到过)。