MySQL5.7 中文全文检索与停用词的常用设置

2024-02-20 09:35:14 举报文章

# 查看 MySQL 版本

--by www.qzphp.cn
SELECT version();

# 查看 ngram 分词长度

--by www.qzphp.cn
SHOW VARIABLES LIKE 'ngram_token_size';

# 在 my.ini 文件中添加分词长度配置:

--by www.qzphp.cn
ngram_token_size=2

# 查看停用字的配置

--by www.qzphp.cn
SHOW GLOBAL VARIABLES LIKE '%stopword%';

# 在 my.ini 文件中添加禁止使用 MyISAM 存储引擎默认的停用字:

--by www.qzphp.cn
ft_stopword_file=""

# 重置索引表,只适用  MyISAM 存储引擎

--by www.qzphp.cn
REPAIR TABLE `test` QUICK;

# 查看 InnoDB 存储引擎的默认停用字

--by www.qzphp.cn
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD;

# 添加自定义停用字表,只用于 InnoDB 存储引擎的停用字设置

--by www.qzphp.cn
CREATE TABLE `custom_stopwords`(`value` VARCHAR(30)) ENGINE = INNODB;

# 添加自定义停用字

--by www.qzphp.cn
INSERT INTO `custom_stopwords` (`value`) VALUES ('停用字');

# 临时设置自定义的停用字表,只适用  InnoDB 存储引擎,重启 MySQL 服务会失效

--by www.qzphp.cn
SET GLOBAL innodb_ft_server_stopword_table = '数据库名/custom_stopwords';

# 在 my.ini 文件中添加 InnoDB 存储引擎的自定义停用字表设置(永久的):

--by www.qzphp.cn
innodb_ft_server_stopword_table="数据库名/custom_stopwords"

# 重置索引表,适用  InnoDB 存储引擎

--by www.qzphp.cn
OPTIMIZE TABLE `test`;

# 查看 InnoDB 存储引擎的全文检索表当前的分词情况

--by www.qzphp.cn
SET GLOBAL innodb_ft_aux_table="数据库名/test";
SELECT * FROM information_schema.INNODB_FT_INDEX_CACHE ORDER BY DOC_ID, POSITION;

# 查看 MySQL 所有的分词长度设置

--by www.qzphp.cn
SHOW VARIABLES LIKE '%_%token%';

# 查看 MySQL 所有的全文检索相关设置

--by www.qzphp.cn
SHOW VARIABLES LIKE '%ft%';

# 添加测试表

--by www.qzphp.cn
CREATE TABLE `test` (
    `id` INT (11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR (255) NOT NULL,
    PRIMARY KEY (`id`),
    FULLTEXT KEY `fk_name` (`name`) /*!50100 WITH PARSER `ngram` */
) ENGINE = MyISAM 或 InnoDB DEFAULT CHARSET = utf8;

# 添加测试数据

--by www.qzphp.cn
INSERT INTO `test`(`name`) VALUES ('D-Hanks 溶液');

# 全文检索查询

--by www.qzphp.cn
SET @so = 'Hanks 溶液';
SELECT *, MATCH (`name`) AGAINST (@so IN BOOLEAN MODE) AS `score` FROM `test`
WHERE MATCH (`name`) AGAINST (@so IN BOOLEAN MODE)
ORDER BY `score` DESC;

# 重建中文全文检索索引

--by www.qzphp.cn
DROP INDEX `fk_name` ON `test1`;
CREATE FULLTEXT INDEX `fk_name` ON `test1` (`name`) WITH PARSER `ngram`;

# 更改存储引擎

--by www.qzphp.cn
ALTER TABLE test1 ENGINE = INNODB;


如果你认为本文可读性较差,内容错误,或者文章排版错乱,请点击举报文章按钮,我们会立即处理!