1.MySQL全文检索
全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。
MySql很早就已支持全文检索了,只不过在5.6以前的版只支持MyISAM引擎,5.6以后InnoDB也开始支持全文检索。不过一直以来MySQL默认的全文索引parser只适合于Latin,因为Latin是通过空格来分词的。但对于像中文,日文和韩文来说,没有这样的分隔符,一个词可以由多个字来组成就显得不合适。但从MySql5.7开始,内置了n-gram全文索引插件开始支持中文。
2.MySQL8实现中文全文检索
以MySQL8.0.21_x64版本为例:

实现步骤:
1).配置ngram参数
在my.ini添加如下配置
#中文分词检索
ngram_token_size=1
innodb_ft_min_token_size = 1
ft_min_word_len = 1
分词的Size越小,索引的体积就越大,所以要根据具体情况来设置合适的大小: 例如:"信息系统"在设置为不同值时的分词情况 ngram_token_size=1 信,息,系,统 ngram_token_size=2 信息,息系,系统 ngram_token_size=3 信息系,息系统 ngram_token_size=4 信息系统
2).建立全文索引
MySQL只能字段数据类型为 char、varchar、text、longtext 上创建全文索引。
例如:在article表的title和content上建立全文索引:
ALTER TABLE article ADD FULLTEXT INDEX article_fulltext (title,content) with parser ngram;
3).查询语法
select aid,title,content from article where flag = 0 and MATCH(title,content) against ("排序算法" in boolean mode);
运行效果:

注意:MATCH()函数使用的字段名只能是同一个表的字段,因为全文索引不能够跨多个表进行检索。
3.全文检索模式
常用的全文检索模式有两种:
自然语言模式是MySQL默认的全文检索模式。自然语言模式不能使用操作符,不能指定关键词必须出现或者必须不能出现等复杂查询。在该模式下,查询将被转换为n-gram分词查询的并集,例如,在ngram_token_size=2配置下:(‘生日快乐’)转换为(‘生日', '日快', '快乐’)
BOOLEAN模式可以使用操作符,不会像自然语言一样自动拆词查询并集(除非手动空格隔开),并且支持指定关键词必须出现或者必须不能出现或者关键词的权重高还是低等复杂查询。
小结 - MySql从5.7版本开始支持中文全文检索,支持MyISAM和InnoDB两种引擎。 - MySQL只能在字段的数据类型为 char、varchar、text、longtext 上创建全文索引。 - 常见的全文检索模式有:自然语言模式和BOOLEAN模式