MySQL中文全文搜索

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 

你可能感兴趣的:(mysql)