> 文章列表 > 【多选模糊查询】多选模糊查询, 全文检索 和 正则匹配,任选其一 查出结果的3种实现

【多选模糊查询】多选模糊查询, 全文检索 和 正则匹配,任选其一 查出结果的3种实现

【多选模糊查询】多选模糊查询, 全文检索 和 正则匹配,任选其一 查出结果的3种实现

需求:多选模糊查询,任选其一查出结果

  • 1,3,4 是我们库里的,下拉框多选,选择了3个值

  • 搜 1,搜出 前两条。

  • 搜 2,搜出 第一条 和 第三条

  • 搜2,4,搜出都会搜出来

1	1,2
2	1,3,4
3	2,4
CREATE TABLE `student` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`),FULLTEXT KEY `n1` (`name`) /*!50100 WITH PARSER `ngram` */ 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;-- 难道新版mysql 默认的是ngram,还是 /*!50100 WITH PARSER `ngram` */这样就指定了?
FULLTEXT KEY `n1` (`name`) WITH PARSER ngram

实现1:全文检索

参考:https://blog.csdn.net/qq120631157/article/details/130079470

注意配置:

[mysqld]
ft_min_word_len=1
ngram_token_size=1
innodb_ft_min_token_size=1
SELECT* 
FROMstudent 
WHEREmatch ( name ) against ("2")

实现2:使用正则表达式查询

  • 前端的参数替换一下
maintKind.replace(",", "|")
select * from products where pro_id REGEXP '1000|2000';and dr.dispose_way REGEXP #{term.disposeWay}
  • 参考文章:https://blog.csdn.net/qq120631157/article/details/130082537

实现3:使用mybaits循环

sql最终拼接 or pro_id like %1% or pro_id like %2%
  • 重在实现方式的思考。查想要的资料,总能找到自己想要的。

其他关于索引的保存

show index from game -- 查询这个表的索引
repair table student quick; -- 重建索引-- 创建索引
CREATE FULLTEXT INDEX ft_index ON student (name) WITH PARSER ngram-- 查询 和 FULLTEXT 相关
SHOW VARIABLES LIKE 'ft%' -- 查询 和 ngram 相关的
show variables like'%token%';