MySQL5.7.6之前的版本,全文索引值支持英文,但是从MySQL5.7.6开始,内置了ngram全文解析器,可以支持中文全文索引。
ngram全文解析器能够对文本进行分词,每个单词是连续的n个字的序列,例如 “大家好”这三个字就可以拆分为
大 家 好
大家 家好
大家好
MySQL 中使用全局变量ngram_token_size来配置ngram中n的大小,它的取值范围是1到10,默认值是4。因为中文是两个字组成一个词,所以如果要对中文进行全文搜索的话需将值设置为2。
使用下边两个命令可以查询该变量的值
SHOW VARIABLES LIKE 'ft_min_word_len';
SHOW VARIABLES LIKE 'ft%';
在MySQL配置文件中进行如下配置,然后重启MySQL服务即可
[mysqld]
ft_min_word_len = 2
ngram_token_size=2
1、创建表时创建只需加入 FULLTEXT (column1, column2) WITH PARSER ngram 即可。
2、通过 alter table 的方式来添加
ALTER TABLE tablename ADD FULLTEXT INDEX ft_index (column1,column2) WITH PARSER ngram;
需要注意的是在全文搜索时,如果需要同时在多个列中搜索,需要多个列同时建立索引(如上所示),如果两个列分开建立,单独建立多个索引是无效的,因为一个表只能建立一个全文检索字段。
1、IN NATURAL LANGUAGE MODE 方式只会返回匹配的结果集
SELECT goodsName FROM tb_goods
WHERE MATCH (goodsName,introduce)
AGAINST ('冰箱' IN NATURAL LANGUAGE MODE);
2、
WITH QUERY EXPANSION 方式如果返回的结果较少,则会扩展搜索
SELECT goodsName FROM tb_goods
WHERE MATCH (goodsName,introduce)
AGAINST ('冰箱' WITH QUERY EXPANSION);
'apple banana'
无操作符,表示或,要么包含apple,要么包含banana
'+apple +juice'
必须同时包含两个词
'+apple macintosh'
必须包含apple,但是如果也包含macintosh的话,相关性会更高。
'+apple -macintosh'
必须包含apple,同时不能包含macintosh。
'+apple ~macintosh'
必须包含apple,但是如果也包含macintosh的话,相关性要比不包含macintosh的记录低。
'+apple +(>juice