Solr重复数字宽松匹配需求:开箱即用过滤器可行吗?
解决方案分析
首先明确:Solr开箱即用的过滤器没法直接实现你要的需求,得自定义TokenFilter。
为啥自带过滤器搞不定?
你要的是针对「包含3个及以上连续重复数字的token」,生成多个缩短重复部分的变体(比如7200000生成7200、72000这类),自带的过滤器里没有能精准做这件事的:
- EdgeNGram这类n-gram过滤器会生成所有长度的前缀/后缀,但没法只针对重复数字部分截断,会生成很多无关的token(比如
72、720这种不符合你需求的)。 - PatternReplaceFilter只能做单一替换,没法一次性生成多个不同长度的变体token。
- WordDelimiter、NumberFilter这类工具,都是处理数字拆分、格式转换,不涉及重复字符的动态截断生成多token。
自定义过滤器的思路
你需要写一个自定义的TokenFilter,核心逻辑大概是:
- 遍历每个token,识别其中是否存在连续3个及以上的重复数字(比如末尾的
00000)。 - 针对符合条件的token,生成多个变体:保留前面的非重复部分,逐步减少重复数字的数量(比如
7200000→720000、72000、7200,直到重复数字少于3个为止)。 - 把这些变体和原token一起输出,供后续索引使用。
这样就能覆盖用户漏输1-2个零的场景,保证能匹配到对应的文档。
内容的提问来源于stack exchange,提问作者Christopher Schneider
相关产品推荐
相关产品推荐

