最近在业务中遇到了需要使用一个中文字段多次 like "%str[]%" ,其中str[]表示一个字符串数组,并且之间的关系是or;
然后自己再加入一个分词,这个查询条件少说也有快十来个like 吧,觉得这样的查询太难看了。
于是我找到一个叫做全文索引的东西;
至于全文索引是什么东西,不是这篇文章的重点,我会列出我所参考的几个网站:
这里介绍步骤:
1、读懂MATCH() AGAINST()语法
2、对于一个尚未创建索引的字段,它会提示:
[Err] 1191 - Can't find FULLTEXT index matching the column list
也就是没有创建索引,于是需要添加索引
3、再者发现不能搜索单字,什么意思呢
SELECT * from make where MATCH(search_key) AGAINST('刀' in boolean mode);
这样虽然我的字段里有“刀”,并且“刀”前后是有空格的,都搜不到;
这是因为需要改mysql的配置文件my.ini(linux下是my.cnf)
[mysqld]
port= 3306innodb_ft_min_token_size=1ft_min_word_len=1
这个size表示索引词的最小大小,也有说这个中文应该设置为2的,这里mark一下以后去查查
4、重启mysql,发现还是不行
是因为需要刷新已有的缓存;
ALTER TABLE table_name ENGINE='innodb';
OK,这样一来就可以了
5、发现mysql5.7新增了n-gram分词功能
这个日后研究。。。