Solr电商搜索中将阿拉伯数字识别为罗马数字的适配方案咨询
罗马数字转阿拉伯数字的同义词方案合理性判断
这个方案有一定可行性,但不属于最优解,存在明显局限性:
- 覆盖场景单一:仅能解决阿拉伯数字和罗马数字的匹配问题,无法覆盖
a7m3、索尼阿尔法a73等同型号的其他口语化表述变体 - 易出现误匹配:同义词规则粒度控制不当的话,会把其他带数字3的无关商品也关联到罗马数字III的结果,拉低召回准确率
- 维护成本高:罗马数字存在
IV、IX、XL等特殊简写规则,需要一一对应维护,型号越多维护成本越高
最优落地解决方案
建议采用字符规范化+业务同义词扩展+多字段加权匹配的组合方案,具体实现步骤如下:
- 统一索引、查询阶段的字符规范化处理
不要用同义词规则做数字转换,而是在Solr的字段分析链中加正则替换过滤器,统一把所有罗马数字转换为阿拉伯数字,保证索引侧和查询侧的转换逻辑完全一致,对应配置示例:
<!-- 在商品标题字段的fieldType分析链中添加以下规则,索引、查询阶段都要加 --> <filter class="solr.PatternReplaceFilterFactory" pattern="\bIII\b" replacement="3" replace="all" /> <filter class="solr.PatternReplaceFilterFactory" pattern="\bII\b" replacement="2" replace="all" /> <filter class="solr.PatternReplaceFilterFactory" pattern="\bIV\b" replacement="4" replace="all" /> <filter class="solr.PatternReplaceFilterFactory" pattern="\bIX\b" replacement="9" replace="all" />
处理后商品名里的III会被转为3,用户查询的3也保持为3,直接就能精准匹配,匹配效率和准确率都远高于同义词方案。
- 补充业务同义词库
针对3C数码等型号变体多的品类,维护专属同义词表,覆盖用户常用的口语化表述,比如:
alpha,阿尔法,α,a a73,a7 3,a7iii,a7m3 sony,索尼
同义词规则同样需要在索引、查询阶段同时生效,覆盖更多用户输入场景。
新增自定义搜索词字段兜底
单独给商品新增search_tags字段,权重设置高于普通描述字段,由运营手动补充对应商品的用户常用搜索词,针对非常见的偏门搜索叫法做兜底覆盖。长尾场景适配
如果品类型号变体极多,可以给型号字段配置edge ngram分词,控制分词长度在2-8个字符之间,保证用户输入连续字符就能命中对应商品,覆盖长尾搜索需求。
内容的提问来源于stack exchange,提问作者Krunal
相关产品推荐
相关产品推荐

