一、这个需求长啥样?
示例:如下图,需求上要求根据【客户名称】去匹配数据库中的类似客户,类似于输入关键字进行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('岭南园林');
结果就是下图:
妥妥的没问题,成功通过的测试大佬的考核!