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

一 需求

项目要做一个类似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 正则表达式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章