RDS MySQL 全文检索相关问题的处理

Posted 狂客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RDS MySQL 全文检索相关问题的处理相关的知识,希望对你有一定的参考价值。

 

RDS mysql 全文检索相关问题

1. RDS MySQL 对全文检索的支持

2. RDS MySQL 全文检索相关参数

3. RDS MySQL 全文检索中文支持

3.1 MyISAM 引擎表

3.2 InnoDB 引擎表

4. like \'%xxx%\' 和全文检索的比较

4.1 like \'%xxx%\'

4.2 全文检索

5. ft_query_expansion_limit 参数作用


1. RDS MySQL 对全文检索的支持

RDS MySQL 5.5 仅 MyISAM 引擎表支持全文索引,RDS MySQL 5.6 版本 MyISAM 和 InnoDB 引擎都支持全文索引。

 

2. RDS MySQL 全文检索相关参数

可以在控制台  参数设置来设置下列参数。

# 参数名称 默认值 最小值 最大值 作用
1 ft_min_word_len 4 1 3600 MyISAM 引擎表全文索引包含的最小词长度
2 ft_query_expansion_limit 20 0 1000 MyISAM引擎表使用 with query expansion 进行全文搜索的最大匹配数
3 innodb_ft_min_token_size 3 0 16 InnoDB 引擎表全文索引包含的最小词长度
4 innodb_ft_max_token_size 84 10 84 InnoDB 引擎表全文索引包含的最大词长度
show global variables like \'ft_%\'; --查看 MyISAM 引擎表全文检索相关参数

show global variables like \'innodb_ft%\'; --查看 InnoDB 引擎表全文检索相关参数

3. RDS MySQL 全文检索中文支持

MyISAM 引擎表和 InnoDB 引擎表(需 RDS MySQL 5.6 版本)都支持中文全文检索。

 

3.1 MyISAM 引擎表

MyISAM 引擎表需要将 ft_min_word_len 设置为小于等于需要检索的最小分词长度,设置完毕后建议重新创建表上已有的全文索引;对于中文检索,建议将 ft_min_word_len 设置为 1。

ft_02.png

CREATE TABLE `my_ft_test_02` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `idx_ft_name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

--重建全文索引步骤:

alter table my_ft_test_02 drop key idx_ft_name; --删除已有的全文索引

alter table my_ft_test_02 add fulltext key idx_ft_name (name); --重新添加全文索引

3.2 InnoDB 引擎表

InnoDB 引擎表需要将 innodb_ft_min_token_size 设置为小于等于需要检索的最小分词长度,设置完毕后建议重新创建表上已有的全文索引;对于中文检索,建议将 ft_min_word_len 设置为 1

ft_01.png

CREATE TABLE `my_ft_test_01` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `idx_ft_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

--重建全文索引的步骤:

alter table my_ft_test_01 drop key idx_ft_name; --删除已有的全文索引

alter table my_ft_test_01 add fulltext key idx_ft_name (name); --重新创建全文索引

4. like \'%xxx%\' 和全文检索的比较

4.1 like \'%xxx%\'

对于数据量比较小,查询条件无法分词的情况下,可以考虑使用 like \'%xxx%\' 来进行查询。但是由于 like  \'%xxx%\' 这样的条件无法使用字段上的索引,因此通常执行时间较长,会耗费比较多的资源;建议结合查询其他条件来使用,这样可以尽量使用其他字段的索引来加速查询。

ft_03.png

 

4.2 全文检索

全文检索本身是按 进行匹配,因此返回的结果会和 like \'%xxx%\' 的方式有所区别

ft_04.png

 

5. ft_query_expansion_limit 参数作用

MySQL 全文检索支持扩展检索,具体请参考 带查询扩展的全文检索 

参数 ft_query_expansion_limit 的作用是指定MyISAM引擎表使用with query expansion进行全文搜索的最大匹配数,下面以一个例子来说明其作用。

参数 ft_query_expansion_limit 当前设置为 20:

ft_06.png

当前表中相关的记录情况:

ft_05.png

使用查询扩展的结果:

ft_07.png

 

 

如果问题还未能解决,请联系售后技术支持

 jpg改rar

以上是关于RDS MySQL 全文检索相关问题的处理的主要内容,如果未能解决你的问题,请参考以下文章

RDS MySQL 表上 Metadata lock 的产生和处理

使用 KMS 进行 AWS RDS 加密会影响性能吗?

RDS for MySQL 删除数据后空间没有减少处理方法

Lambda - 将 CSV 从 S3 导入 RDS MySQL

连接RDS MySQL时报错has more than ‘max_user_connections‘已解决

更改 AWS RDS mysql时区 -摘自网络