mysql8开启全文索引搜索结果不准确等问题小结

因为网站数据量过大,原来使用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.comwww.kz8.cn  www.dazhe5.cn

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值