基于MySQL正则表达式实现类似全库搜功能

    技术2022-07-10  114

    一 需求

    项目要做一个类似Elasticsearch全库搜的小功能,但是数据存放在MySQL里面,数据量不是很大,使用模糊查询性能也还可以接受。

    一开始想直接用like,但是为了支持多个关键字查询,用like的话要循环字段进行拼装成如下的SQL语句:

    SELECT * from tableName WHERE field_a like '%关键字1%' OR field_a like '%关键字2%' OR field_a like '%关键字3%' OR field_b like '%关键字1%' OR field_b like '%关键字2%' OR field_b like '%关键字3%'

    但是还有其他多个字段都需要支持关键字搜索,循环拼装显然比较麻烦。

    二 方法

    然后想到之前有用过正则表达式查字段值匹配的方法,再次查看了下正则表达式用法,发现有个正则正好满足当前需求:

    p1|p2|p3: 匹配 p1 或 p2 或 p3。 -- SQL语句 SELECT * FROM tableName WHERE field_a REGEXP 'key1|key2|key3';

    使用正则这种写法就避免了循环拼装字段的麻烦。

    实例查询如下:

    SELECT * from t_cities WHERE city REGEXP '台|河' OR provinceid REGEXP '台|河'

    结果如下: 附:MySQL其他正则表达式用法


    参考: 1.MySQL 正则表达式

    Processed: 0.016, SQL: 9