因为网站数据量过大,原来使用like查询效率太慢。所以升级了全文索引,中间遇到一些问题,这里总结一下,并且附上解决方法。
开启全文索引的方法,请自行百度
1.部分关键词搜索不到,比如,搜索关键词ok,what等,查不到结果,
select * from juzi WHERE MATCH(title) AGAINST ('+what' IN BOOLEAN MODE);
select * from juzi WHERE MATCH(title) AGAINST ('+ok' IN BOOLEAN MODE);
原因是MySQL的全文本索引有一个“全文本停用词(Full-Text Stopwords)”的机制,默认启用。
解决方法
随便在哪个数据库创建一个空表:
create table db_stopwords
(
value varchar(18) null
);
去到MySQL配置文件my.cnf或者my.ini(取决你用哪个配置文件)的[mysqld]底下加上以下代码,enbs.cn是我数据库的名称,替换成你自己的
[mysqld]
ft_min_word_len=1
innodb-ft-server-stopword-table=enbs.cn/db_stopwords
innodb_ft_min_token_size=0
ft_stopword_file=""
随后保存,重启mysql,运行sql语句:SHOW VARIABLES LIKE 'innodb_ft_server_stopword_table';如果结果是我们刚才设置的表,证明设置生效了,这时候再重新建立全文索引就能正常搜索了
2.搜索中文结果不准确
SELECT `title`,`cn`,`laiyuan`,`fayin`,`id` FROM `liju` WHERE MATCH (cn) AGAINST ('"中文词"' IN BOOLEAN MODE)
查询以上语句发现与like的结果不一致
解决方法
删除原来的索引,通过以下方式重建索引,查询结构正常!
CREATE FULLTEXT INDEX ft_cn ON liju (cn) WITH PARSER ngram;
相关网站: www.dicto.cn enbs.cn www.ruihongw.com,www.kz8.cn www.dazhe5.cn