【MySQL】全文索引(FULLTEXT)的使用

164 阅读2分钟

一:概念

全文索引与普通的索引不是一回事,在查找上方面其效率是普通模糊(like)查询和N倍,是MySQL专门提供用作搜索引擎的

二:版本支持

Mysql 5.6之前版本,只有MyISAM支持全文索引,5.6之后,Innodb和MyISAM均支持全文索引

另外,只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引

三:ngram解析器

5.6之后MySQL自带ngram解析器,可以解析中日韩三国文字,如果不使用ngram解析器,则MySQL默认使用空格与符号作为分隔符(对于英文自然够用了,但对于中日韩文字就不好用了,所以才需要ngram解析器)

四:开始使用

1:创建索引

用可视化工具创建就好了

2:查询语句

全文索引有专用的查询语法:match(字段) against(关键字)

select * from answer where match(content) against("测试表")

3:为了更好的搜索效果,通常会配置最小搜索长度

全文索引的相关参数都无法进行动态修改**,必须通过修改MySQL的配置文件来完成**。通常修改最小搜索长度的值为2,首先打开MySQL的配置文件 (MySQL8.0的配置文件为:my.ini),在 [mysqld] 的下面追加以下内容

// MyISAM
ft_min_word_len = 4; 默认值
ft_max_word_len = 84; 默认值

// InnoDB
innodb_ft_min_token_size = 3; 默认值
innodb_ft_max_token_size = 84; 默认值

//ngram解析器令牌长度----即against()中字符串切分的最小字符长度
ngram_token_size = 2~10 ; 默认值

一般设定:(以下例子均是假定设置如下)
在 [mysqld]的下面追加:
innodb_ft_min_token_size = 2
ft_min_word_len = 2
ngram_token_size = 2

查看该变量的语法:

show variables like "%ft%"
show variables like "%ngram%"

preview

在配置完参数之后,然后重启 MySQL 服务器,(不会重启,这里我用了最土的方法,直接重启电脑)并删除原先的索引,重新创建

注意,修改完参数以后,一定要重启电脑(或重启MySQL)并重新创建(或修复)索引,不然参数不会生效

五:三种全文搜索模式

1:自然语言模式(IN NATURAL LANGUAGE MODE,默认情况下为该模式)

SELECT * FROM user WHERE MATCH(userName) AGAINST ('张三');

如果最小搜索长度为1的话,则查找包含张,或三,或张三的记录;与布尔搜索模式中的‘+张三’结果相同

2:布尔搜索模式(IN BOOLEAN MODE)

  • 【+】----------必须包含此字符串

  • 【-】----------必须不包含此字符串

  • 【“ ”】--------双引号内作为整体不能拆词

  • 【> 】--------提高该词的相关性,查询的结果靠前

  • 【< 】--------降低该词的相关性,查询的结果靠后

  • 【*】---------通配符,只能接在词后面

  • SELECT * FROM user WHERE MATCH(userName) AGAINST ('+"美女" & +"动人"' IN BOOLEAN MODE);

转载来源:zhuanlan.zhihu.com/p/417229576

感谢作者辛勤付出