最新消息:欢迎加入小松的QQ群一起讨论一起学习,本站启用elasticsearch全文检索系统,提供搜索的精确度

mysql的全文检索使用2个注意点

MYSQL 1152浏览 0评论

本篇文件是详细讲解mysql的全文检索,因为是开发网站的系统中又用到过,所以拿出来详细讲一下

phpmyadmin使用全文检索

phpmyadmin使用全文检索

mysql全文检索设置条件
1.表的存储引擎是MyISAM,默认存储引擎InnoDB不支持全文索引(新版本MYSQL5.6的InnoDB支持全文索引)
2.使用全文检索字段类型为:char、varchar和text

mysql全文检索可以在创建表的同时就一起定义好,或者在表创建完成之后,通过语句alter table或create index来追加索引,总之先后的效果是一样的,但是两者的效率却是存在很大差异的,大量的实践证明,对于大数量的表来说,先插入数据再来定义全文索引的 速度要远远优于在一个已经定义好全文索引的表里面插入大量数据的速度。你一定会问:这是为什么呢?其实,道理很简单,前者只需要一次性对你的索引列表进行操作,排序比较都是在内存中完成,然后写入硬盘;后者则要一条一条去硬盘中读取索引表然后再进行比较最后写入,自然这样速度就会很慢。

注意点一
少于4个字符的单词不会被包含在全文索引里,可以通过修改my.cnf修改选项
ft_min_word_len=4
mysql全文检索默认指定了最小字符长度是4,必须要匹配大于4的才会有返回结果,可以用SHOW VARIABLES LIKE ‘ft_min_word_len’ 来查看指定的字符长度,也可以在mysql配置文件my.ini 更改最小字符长度

注意点二

SELECT * FROM `category` WHERE MATCH (catname) AGAINST (‘is’)
mysql全文检索在集和查询中的对每个合适的词都会先计算它们的权重,一个出现在多个文档中的词将有较低的权重(可能甚至有一个零权重),如果词出现较少的,它将得到一个较高的权重,mysql默认的阀值是50%,上面‘is’如果在每个文档都出现,因此是100%,只有低于50%的才会出现在结果集中。
有人会想,我不去管权重大小,只要有匹配的就给我返回结果集中,那么该如何做呢?你可以加入IN BOOLEAN MODE详细看下面的使用
SELECT * FROM `category` WHERE MATCH(catname) AGAINST(‘is’ IN BOOLEAN MODE)
全文索引的缺点
1.数据表越大,全文索引效果好,比较小的数据表会返回一些难以理解的结果
2.全文检索以整个单词作为匹配对象,单词变形(加上后缀,复数形式),就被认为另一个单词
3.只有由字母,数字,单引号,下划线构成的字符串被认为是单词,带注音符号的字母仍是字母,像C++不再认为是单词
4.不区分大小写
5.全文索引创建速度慢,而且对有全文索引的各种数据修改操作也慢
6.不支持中文

QQ交流群:136351212

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
转载保留版权:小松博客» mysql的全文检索使用2个注意点
本文链接地址:https://www.phpsong.com/352.html

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
木有头像就木有JJ!点这里按步骤申请Gravatar头像吧!