-
什么是ngram?
ngram是全文解析器能够对文本进行分词,中文分词用 ngram_token_size 设定分词的大小,ngram_token_size 的值就是连续n个字的序列
示例:使用ngram对于全文索引进行分词
ngram_token_size =1,分词为 ‘全‘,’文‘,’索‘,’引‘
ngram_token_size =2,分词为 ‘全文‘,’文索‘,’索引‘
ngram_token_size =3,分词为 ‘全文索‘,’文索引‘
ngram_token_size =4,分词为 ‘全文索引‘
-
如何查看配置ngram_token_size?
#查看默认分词大小 ngram_token_size=2
show variables like '%token%';
查询结果
innodb_ft_min_token_size
默认3,表示最小3个字符作为一个关键词,增大该值可减少全文索引的大小
innodb_ft_max_token_size
默认84,表示最大84个字符作为一个关键词,限制该值可减少全文索引的大小
ngram_token_size
默认2,表示2个字符作为内置分词解析器的一个关键词,如对“abcd”建立全文索引,关键词为’ab’,‘bc’,‘cd’
当使用ngram分词解析器时,innodb_ft_min_token_size和innodb_ft_max_token_size 无效
-
怎么配置ngram?
1、ngram可以作为启动字符串的一部分或者在配置文件中设置
启动字符串:
mysqld --ngram_token_size=2
2、配置文件():
以windos系统为例,首先找到文件(默认安装路径:C:\ProgramData\MySQL\MySQL Server 5.7\),编辑该文件,在文件后加上如下配置:
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
server_id=100
# 设置mysql的安装目录
basedir=D:\mysql-5.7.24-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql-5.7.24-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 全文检索分词数
ngram_token_size=2
配置完成后重启服务
-
如何创建全文索引并且使用ngram?
1、通过建表语句建立
CREATE TABLE `full_search_test` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`author` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL,
`title` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL,
`content` text COLLATE utf8mb4_general_ci,
PRIMARY KEY (`id`),
FULLTEXT KEY `full_index_title` (`title`) WITH PARSER `ngram`
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
2、通过 alter table 的方式来添加
ALTER TABLE full_search_test ADD FULLTEXT INDEX full_index_title(title) WITH PARSER ngram;
3、直接通过create index的方式
#为title创建全文索引并且使用ngram全文解析器进行分词
CREATE FULLTEXT INDEX full_index_title ON full_search_test(title) WITH PARSER `ngram`;