自定义实体多选类型自定义字段搜索功能异常Bug排查
问题原因
这个故障和Storefront端的搜索配置没有关联,后台自定义实体多选字段的选择器走独立的Admin API搜索链路,不会读取前台的AND/OR搜索模式、拆分搜索词配置,本质是后台关联实体选择器的默认匹配逻辑存在缺陷:
- 后台实体搜索默认基于ngram分词实现前缀模糊匹配,默认配置下分词token的最小长度为3个字符
- 当输入的搜索词拆分后出现长度刚好等于最小token长度的片段时,搜索逻辑会错误从「前缀模糊匹配」切换为全字段精确等值匹配,匹配范围会覆盖关联实体的所有可搜索字段(包含未对外展示的内部字段、翻译关联字段等),只要任意一个字段不满足精确匹配规则,所有结果都会被过滤。
你输入Apple W时,拆分后的搜索片段长度都没有触发临界校验,所以可以正常返回结果;输入到Apple Wat时,拆分出的Wat片段长度刚好为3,触发了错误的精确匹配逻辑,直接导致搜索无结果。
补充场景说明:Storefront端设置OR搜索模式、给商品名称开启拆分搜索词功能后出现同类问题,也是相同底层逻辑导致——拆分出的短搜索片段触发了非预期的精确匹配校验,覆盖了原本的模糊匹配规则。
修复方案
- 全局调整分词阈值:修改项目配置文件
config/packages/shopware.yaml,把后台搜索的ngram最小分词长度从默认的3调整为2,配置示例:
shopware: admin_es: indexer: ngram_min_length: 2
如果环境启用了Elasticsearch承载后台搜索,配置修改后执行bin/console es:index admin重建后台索引即可生效;如果使用默认的MySQL搜索驱动,需要同步修改MySQL搜索监听器的对应分词长度参数。
- 组件级定制修复:如果不希望调整全局搜索配置,可以单独覆写对应自定义字段选择器的前端组件逻辑,强制指定搜索仅匹配目标展示字段(如实体名称字段),关闭默认的全字段搜索逻辑,同时可以把边输入边搜索的触发逻辑改成输入完成按回车后再发起请求,避免输入过程中触发临界长度bug。
内容的提问来源于stack exchange,提问作者Alphaegen
相关产品推荐
相关产品推荐

