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 <pie)'
查询必须包含apple和juice或者apple和pie的记录,但是apple juice的相关性要比apple pie高。

'apple*'
查询包含以apple开头的单词的记录,如apple、apples、applet。

'"some words"'
使用双引号把要搜素的词括起来,效果类似于like '%some words%',
例如“some words of wisdom”会被匹配到,而“some noise words”就不会被匹配。
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值