因为网站数据量过大,原来使用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;
————————————————

1
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/hhg2006/article/details/138337812