MySQL全文索引搜索不出结果是什么原因?
时间:2015-09-02 阅读:次 QQ群:182913345
mysql全文索引非常有用,我做过测试,在1千万数据的mysql表上使用全文索引查找响应是极其快的。不过有时加上了全文索引,却怎么也搜索不出结果是什么原因呢?你按下面的可能原因一条条排查吧:
1、mysql是否未开启全文索引 ?
这个可以看表中索引长度,全文索引非常占用空间,如果索引长度为0或者很小的话,那基本就是没有开全文索引,打开mysql的配置文件:my.ini或者my.cnf,查找一下是否有此项配置:ft_min_word_len,如果没有就表示mysql没有开启全文索引。修改mysql配置文件,在 [mysqld] 后面加入一行“ft_min_word_len=1”,重启Mysql。重启之后需要修复表以修复索引。使用命令: REPAIR TABLE 'table_name';可以使用快速修复:REPAIR TABLE 'table_name' quick;
2、检查你搜索的关键词是不是常见的单词?
值得一提的是,全文检索并不是对所有的词都进行收录,它会丢掉很多它认为是垃圾的词语,mysql将忽略"常见的"单词,而"常见"在这里的含义是"至少在一半的数据行里出现过"。在这次测试中我对数据表中的1千个邮箱进行查询时发现根本检查不到邮箱后缀比如'sohu','sina'关键词(数据表中有很多搜索新浪邮箱),就是这个原因。
3、搜索关键词是否中文?
迄今为止,MySQL对中文全文索引没有什么好的支持,MySQL是不会识别中文词语的。要建立中文全文索引,暂时的解决方案只有手动将中文分词(以空格的形式将中文词语分开),来将中文转换成MySQL认识的语言。中文全文索引的解决思路是先对插入的要建全文索引的中文数据进行分词,并将分词数据一并保存(还需要转成非中文存储,比如unicode或者拼音等。再在存储分词数据的字段上建立FULLTEXT索引,查询时在分词字段上搜索。
其它需要注意的是:innodb引擎在mysql5.6之前是不支持全文索引的,只有myisam可支持全文索引,并且FULLTEXT索引只能由CHAR、VARCHAR和TEXT这几种类型的数据列构成。