MySQL配置全文索引

时间:2022-06-01 17:01:34

最近在业务中遇到了需要使用一个中文字段多次 like "%str[]%" ,其中str[]表示一个字符串数组,并且之间的关系是or;

然后自己再加入一个分词,这个查询条件少说也有快十来个like 吧,觉得这样的查询太难看了。

于是我找到一个叫做全文索引的东西;

至于全文索引是什么东西,不是这篇文章的重点,我会列出我所参考的几个网站:

http://blog.csdn.net/zyz511919766/article/details/12780173

http://blog.51yip.com/mysql/1515.html

这里介绍步骤:

1、读懂MATCH() AGAINST()语法

http://www.justwinit.cn/post/7278/

2、对于一个尚未创建索引的字段,它会提示:

[Err] 1191 - Can't find FULLTEXT index matching the column list

也就是没有创建索引,于是需要添加索引

http://blog.csdn.net/u011734144/article/details/52817766

3、再者发现不能搜索单字,什么意思呢

SELECT * from make where MATCH(search_key) AGAINST('' in boolean mode);

这样虽然我的字段里有“刀”,并且“刀”前后是有空格的,都搜不到;

这是因为需要改mysql的配置文件my.ini(linux下是my.cnf)

[mysqld]
port = 3306
innodb_ft_min_token_size=1
ft_min_word_len=1

这个size表示索引词的最小大小,也有说这个中文应该设置为2的,这里mark一下以后去查查

4、重启mysql,发现还是不行

是因为需要刷新已有的缓存;

ALTER TABLE table_name ENGINE='innodb';

OK,这样一来就可以了

5、发现mysql5.7新增了n-gram分词功能

MySQL 5.7 深度解析: 中文全文检索

这个日后研究。。。