转 MYSQL8.0全文索引使用
以下的配置参数为啥是这样配置的。
在 [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解析器令牌长度----即aiginst()中字符串切分的最小字符长度
ngram_token_size = 2~10 ; 默认值
一般设定:(以下例子均是假定设置如下)
在 [mysqld]的下面追加:
#MyISAM
ft_min_word_len = 1
#InnoDB
innodb_ft_min_token_size = 1
#ngram
ngram_token_size = 1
设定好后需要关闭mysql服务,再重启mysql服务。在全文查询前,需要先将全文索引删除(如果有),再重新建。20200408
实测后,文章的内容基本是对的。另外,后面发现设置为ngram_token_size = 1,搜索两个字的中文词,会切分搜,导致搜不到自己要的效果,所以改为2,对于单个字的的搜索like查询。 20200412
MYSQL8.0全文索引使用
概述:
在一堆文字中找到含有关键字的应用。当然也可以用以下语句实现:
SELECT * FROM <表名> WHERE <字段名> like ‘%ABC%’
但是它的效率太低,是全盘扫描。
Mysql 提供了更高效的方法全文索引(FULLTEXT)
重要:
Mysql 5.6之前版本,只有myisam支持全文索引,5.6之后,Innodb和myisam均支持全文索引。
只有char、varchar、text类型字段能创建全文索引。
当大量写入数据时,建议先写入数据,后再建立全文索引,提高效率。
Mysql内置ngram 解析器,可以解析中日韩三国文字。有汉字的一定要启用它。
英文分词用空格,逗号;中文分词用 ngram_token_size 设定,后面有讲解。
全文索引在引用前需要新设定下变量
均在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解析器令牌长度----即aiginst()中字符串切分的最小字符长度
ngram_token_size = 2~10 ; 默认值
一般设定:(以下例子均是假定设置如下)
在 [mysqld]的下面追加:
innodb_ft_min_token_size = 1
ft_min_word_len = 1
ngram_token_size = 1
设定好后需要关闭mysql服务,再重启mysql服务。在全文查询前,需要先将全文索引删除(如果有),再重新建。
创建全文索引
建议建表后新建
ALTER TABLE <表名> add FULLTEXT INDEX <索引名>(字段名1,字段2,,) [ WITH PARSER ngram];
全文索引查询
SELECT <字段表> FROM <表名> WHERE MATCH(字段) AGAINST (‘要搜索的关键词’ 搜索模式);
三种全文搜索模式:
自然语言模式,默认,一般省略不写
IN NATURAL LANGUAGE MODE,
例子1:...