尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

应用java实现相似度打分改进sql语句的like功能
📅 发布时间:2026/7/3 19:15:58

一、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

相关新闻

  • Python实现SM4国密算法:从原理到实战加密解密
  • Chimera Painter Hi:面向生物形态学的AI绘画工具
  • LangMem+LangGraph构建可记忆的营销AI Agent

最新新闻

  • Path of Building终极指南:打造流放之路完美Build的完整解决方案
  • 如何轻松获取网页视频资源:开源媒体嗅探工具的完整指南
  • Umi-OCR深度配置与优化终极指南:从入门到精通的离线OCR解决方案
  • Video2X终极指南:免费AI视频超分辨率与智能插帧实战教程
  • 使用MC74HC165A扩展TM4C123GH6PMI GPIO输入的实践指南
  • 从零开始掌握S32K144车规级MCU:5个步骤带你进入汽车电子开发世界

日新闻

  • JMeter接口测试实战:从核心元件到复杂场景构建
  • Java Applet版刽子手游戏源码:含完整项目结构、吊杆绘图与胜负逻辑
  • 使用Apache JMeter对RoadRunner PHP应用进行性能测试与调优指南

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号