不使用ES,如何使用MySQL实现模糊匹配

1.业务场景

例如:我们实现一个公司的申请审批流程,整个业务流程涉及到两种角色,分别是商务角色与管理员角色,整个流程如下图所示:

核心流程总结为一句话:商务角色申请添加公司后由管理员进行审批

         商务在添加公司时,可能为了方便,直接填写公司的简称,而公司全称可能之前已经被添加过了,为了防止添加重复的公司,所以管理员在针对公司信息审批之前,需要查看以往添加的公司信息里有无同一个公司。

2.实现思路

从技术层面需要考虑实现的功能点:

1.分词

2.与库里已有的数据进行匹配

3.按照匹配度对结果进行排序

        分词功能有现成的分词器,所以实现这样的业务场景核心重点就在如何与数据库中的数据匹配并按照匹配度排序。

3.技术选型

方案一:引入ES

方案二:利用MySQL实现

        系统规模比较小的,不建议使用ES,单纯为了实现这个功能引入ES成本较大,还要涉及到数据同步等问题,系统复杂度会提高,所以尽量使用MySQL已有的功能进行实现。

MySQL提供了以下三种模糊搜索的方式:

  • like匹配:要求模式串与整个目标字段完全匹配。
  • RegExp正则匹配:要求目标字段包含模式串即可。
  • Fulltext全文索引:在字段类型为CHAR,VARCHAR,TEXT的列上创建全文索引,执行SQL进行查询。

对相关技术进行优劣分析:

  • like匹配:无法满足需求,所以pass;
  • 全文索引:可定制性差,不支持任意匹配查询,pass;
  • 正则匹配:可是先任意模式匹配,缺点在于执行效率不如全文索引。

针对于这个场景,记录数目相对来说没有那么多,所以对于效率稍低的结果可以接受,因此技术选型方面采用RegExp正则匹配来实现模糊匹配的需求。 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许舒雅的宝贝

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值