当前位置: 首页 > news >正文

应用java实现相似度打分改进sql语句的like功能

一、sql语句的痛点

s.sku_name LIKE CONCAT('%', #{name}, '%')
OR g.goods_name LIKE CONCAT('%', #{name}, '%')
...

本质是连续子串匹配,所以:

场景数据库存用户输入LIKE 能否命中原因
有空格红富士苹果红富士 苹果红富士 苹果不是连续子串
中间掉字农夫山泉矿泉水农夫矿泉水中间缺"山泉",非连续
顺序颠倒苹果12手机手机苹果顺序不对

方式 1:MySQL 原生 ngram 全文索引(最省事,DB 层搞定)

MySQL 内置了 CJK 的ngram分词器:

ALTER TABLE wms_goods_sku ADD FULLTEXT INDEX ft_sku_name (sku_name) WITH PARSER ngram;
-- 查询
WHERE MATCH(sku_name) AGAINST('农夫矿泉水' IN BOOLEAN MODE)

数据库自动按字符 n-gram 建索引,你一行 Java 分词都不用写,还有索引加速。适合做粗召回。

我目前用的是这样的:

WHERE s.del_flag = '0'
AND ( s.sku_name LIKE '%农夫%' OR g.goods_name LIKE '%农夫%' OR ...
OR s.sku_name LIKE '%夫山%' OR ... ) -- 每个 bigram 一组 OR

(前导通配)用不上普通 B-Tree 索引,本质是全表扫描。所以:

  • 多个 bigram 的 OR→ 每行都要跑一遍所有 LIKE,比原来单个 LIKE 更重。
  • 数据量小时(单租户几百~几千 SKU)→ 毫秒级,完全无感,不需要额外索引。
  • 数据量大时(单租户几万~几十万 SKU)→ 会明显变慢。

是否需要加分词索引?分规模看

单租户 SKU 量级当前 LIKE-OR 方案建议
< 5 千毫秒级不用加,保持现状
5 千 ~ 5 万几十~几百 ms建议上 ngram 全文索引
> 5 万可能 1s+必须上 ngram 或独立搜索引擎

如果要优化:MySQL ngram 全文索引

MySQL 内置 CJK 的ngram分词器,可以把召回从"全表扫描"变成"索引命中":

ALTER TABLE wms_goods_sku ADD FULLTEXT INDEX ft_sku_name (sku_name) WITH PARSER ngram;
ALTER TABLE wms_goods ADD FULLTEXT INDEX ft_goods_name (goods_name) WITH PARSER ngram;

召回 SQL 改成:

WHERE MATCH(s.sku_name) AGAINST('农夫矿泉水' IN NATURAL LANGUAGE MODE)

核心算法换成了成熟类库

委托Hutool 5.8.25 的cn.hutool.core.text.TextSimilarity进行相似度打分

可在苹果应用市场搜索“羽辽进销存”免登录体验相似度打分实践应用。
PC端:https://zhicun.site

http://www.jsqmd.com/news/1117188/

相关文章:

  • VLA与Diffusion融合的端到端自动驾驶四大范式
  • Python实现SM4国密算法:从原理到实战加密解密
  • 通达信缠论分析插件ChanlunX:技术分析与量化交易的终极解决方案
  • 技术指南:开源工具实现联想笔记本BIOS高级配置终极方案
  • 突破虚拟机保护屏障:基于VTIL的动态分析技术方案
  • Chimera Painter Hi:面向生物形态学的AI绘画工具
  • LangMem+LangGraph构建可记忆的营销AI Agent
  • Dify 1.15 人工介入功能实战:构建可控AI工作流,实现高质量人机协同
  • 家里有台TS3380,TS3480开机屏幕显示P07,e08错误,维修店竟然说要180元维修费,我当场拒了,网友提醒这个用佳能V6.200原版软件清零就好了,一定要原版软件,不然有被锁主板的风险,亲测
  • 从WhatsApp用户枚举漏洞看API安全:业务逻辑缺陷与防护实践
  • 防火墙实战:封堵Traceroute探测与加固ICMP时间戳漏洞
  • 毕昇JDK 25编译常见问题解决:新手开发者必备排错手册
  • 强引用软引用弱引用虚引用,到底差在哪——我的学习笔记
  • 猫抓浏览器插件终极指南:一站式网页媒体资源嗅探解决方案
  • 5分钟搭建你的大麦网抢票自动化系统:告别手动抢票的焦虑时代
  • 2026免费在线去水印工具推荐!视频图片无水印导出安全无广告
  • 嵌入式全栈技术
  • 如何用Xournal++免费打造你的终极数字笔记本?跨平台手写笔记软件完整指南
  • 3分钟上手:PotPlayer字幕翻译插件的终极使用指南
  • 从数据分布角度理解:为什么不同任务要用不同的损失函数?
  • MCP 2026高危漏洞应急响应:5步实操加固与长效管理机制
  • 注销公告登报办理指南:2026年流程、费用与规范模板
  • Selenium IDE:零代码入门Web自动化测试的最佳实践指南
  • 从Noodlophile恶意软件看版权钓鱼攻击链与防御策略
  • 2026年Word文档压缩完整指南:多种方式降低文件体积,超大文档瘦身实操技巧
  • Qwen3.7plus的web版测试发现Agent能力果然出众!
  • STM32F765ZI与MAX9744的高效音频系统设计
  • 北京登报遗失声明去哪里登报?原来手机上就能直接办!
  • MuleSoft企业级AI编排:实现LLM与ERP/SAP/CRM的可信集成
  • STM32低功耗矩阵键盘设计:硬件与软件协同优化