首页 > 文章列表 > MySQL全文索引、支持中文分词

MySQL全文索引、支持中文分词

mysql
484 2023-04-13

简单介绍

MySQL全文索引是在基于文本的列(char、varchar或text列)上创建的,以提升对这些列中包含的数据的查询和DML操作效率。全文索引被定义为create table语句的一部分,或者使用alter table或create index追加到现有表中。搜索语法为:match(field1,field2,…) against(’keyword‘),更多使用方法及详细信息参考MySQL全文索引官方文档

版本说明

MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引。

MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引。

只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。

创建全文索引

说明:搜索时,默认对中文类分词支持不友好,如果有中日韩文分词需求,在创建索引时,需要声明该分词插件ngram,语法可选【with parser ngram】。

DROP TABLE IF EXISTS `t_stu`;CREATE TABLE `t_stu`  (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `kecheng` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `fenshu` int(11) NULL DEFAULT NULL,
  `keyword` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,  PRIMARY KEY (`id`) USING BTREE,
  FULLTEXT INDEX `ft_index`(`keyword`) WITH PARSER `ngram`
) ENGINE = InnoDB  CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ------------------------------ Records of t_stu-- ----------------------------
INSERT INTO `t_stu` VALUES (1, '张三', '语文', 81, '张三语文');
INSERT INTO `t_stu` VALUES (2, '张三', '数学', 75, '张三数学');
INSERT INTO `t_stu` VALUES (3, '李四', '语文', 76, '李四语文');
INSERT INTO `t_stu` VALUES (4, '李四', '数学', 90, '李四数学');
INSERT INTO `t_stu` VALUES (5, '王五', '语文', 81, '王五语文');
INSERT INTO `t_stu` VALUES (6, '王五', '数学', 100, '王五数学');
INSERT INTO `t_stu` VALUES (7, '王五', '英语', 90, '王五英语');

create index方式创建。

DROP TABLE IF EXISTS `t_stu`;
CREATE TABLE `t_stu` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`kecheng` varchar(255) DEFAULT NULL,
`fenshu` int(11) DEFAULT NULL,
`keyword` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
INSERT INTO `t_stu` VALUES (1, '张三', '语文', 81, '张三语文');
INSERT INTO `t_stu` VALUES (2, '张三', '数学', 75, '张三数学');
INSERT INTO `t_stu` VALUES (3, '李四', '语文', 76, '李四语文');
INSERT INTO `t_stu` VALUES (4, '李四', '数学', 90, '李四数学');
INSERT INTO `t_stu` VALUES (5, '王五', '语文', 81, '王五语文');
INSERT INTO `t_stu` VALUES (6, '王五', '数学', 100, '王五数学');
INSERT INTO `t_stu` VALUES (7, '王五', '英语', 90, '王五英语');
-- create index方式创建
CREATE FULLTEXT INDEX ft_index ON t_stu (keyword) WITH PARSER ngram;
alter table方式创建。
alter table t_stu add fulltext index ft_index(keyword) with parser ngram;
alter table方式创建。
alter table t_stu add fulltext index ft_index(keyword) with parser ngram;

删除全文索引

drop index方式删除。
drop index ft_index on t_stu ;
alter table方式删除。
alter table t_stu drop 
                        来源:https://www.51cto.com/article/718185.html