外包的奇怪需求?需要Mysql按照名称相似度匹配数据

一、这个需求长啥样?

示例:如下图,需求上要求根据【客户名称】去匹配数据库中的类似客户,类似于输入关键字进行LIKE模糊查询的效果,但是我又不能直接LIKE整个名称,咋办?

在这里插入图片描述

二、解决方法

1.傻瓜式LIKE

       我一开始就想到了最原始方法,傻瓜式(啪啪啪打脸的那种)

       1.先解刨这个名称,先用“广东岭南园林有限公司”来举例吧,公司名是由区域+字号+行业+组织形式组成的。区域和组织形式没有关联性可言就可以去掉,剩下的就是"岭南园林"了

       2.剩下的你们懂的…傻瓜式就是直接 LIKE ‘%岭%’ or LIKE ‘%南%’ or LIKE ‘%园%’ or LIKE ‘%林%’

       这样的话,好像是没啥问题,但是从测试结果上一看就能发现不妥了

       结果就是下图:

在这里插入图片描述
       因为公司名有一个“”南“”字,就把云南所有的公司都查出来了。就是当公司名称有一个与区域或者组织形式包含的字相同时,就一些无关的公司就出来了,如果是一个“”有“”字,那么基本包含“”有限公司““的全部都出来了

       而且,用过索引的伙伴都知道最左侧原则,最左侧是个%的时候,索引基本就报废了。所以,这方法不管从结果上还是效率上,都不妥。

2.全文索引

       全文索引是啥我猜不用多说了吧,就是不知道为什么一开始就没有想到它

       下面就很简单了,加索引!

// 添加全文索引
 ALTER TABLE crm_formula ADD FULLTEXT INDEX index_name (customer_name);

       用它!

// 查询方式
select * from crm_formula where match(customer_name) against('岭南园林');

       结果就是下图:
在这里插入图片描述

妥妥的没问题,成功通过的测试大佬的考核!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值