首页 > 数据库 >mysql中文全文索引的记录

mysql中文全文索引的记录

时间:2024-04-14 20:33:56浏览次数:29  
标签:中文 -- 全文索引 token len ngram mysql size

在MySQL 5.7.6之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成单词,然后存入数据库。
从MySQL 5.7.6开始,MySQL内置了ngram全文解析器,用来支持中文、日文、韩文分词。

创建示例

-- 创建表格
CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255),
    content TEXT
);
-- 添加全文索引 
-- 使用WITH PARSER ngram语句创建全文索引时,可以指定使用ngram分词器。
ALTER TABLE articles ADD FULLTEXT INDEX idx_content (content) WITH PARSER ngram;

-- 执行全文搜索
SELECT * FROM articles WHERE MATCH(content) AGAINST('你要搜索的关键词');

配置参数

ft_min_word_len

ft_min_word_len 默认值为 4 ,MySQL 将不会为长度小于 4 的词构建全文索引。

举个例子,假设你有一篇包含短词的文章,比如 "The cat is on the mat.",而 ft_min_word_len 设置为 4。在这种情况下,诸如 "the", "cat", "is", "on", "the", "mat" 这样的短词将不会被包括在全文索引中。因此,如果你搜索 "the",你将无法找到任何匹配,因为 "the" 这个词在索引中不存在。

--显示当前 MySQL 实例中 ft_min_word_len 的设置值
SHOW VARIABLES LIKE 'ft_min_word_len';

如果你希望更改 ft_min_word_len 的值,你可以通过修改 MySQL 配置文件(通常是 my.cnfmy.ini)来实现。找到 ft_min_word_len 参数所在的部分,并将其设置为你想要的值,然后重新启动 MySQL 服务使更改生效。

也可以用命令实现

--长度改为2
SET GLOBAL ft_min_word_len = 2;
--重新构建全文索引,以便新的设置生效
ALTER TABLE your_table_name ENGINE=MyISAM;

根据我的实测,这个参数对中文并没有影响,因为我在创建索引时指定使用ngram分词器。

与默认的全文索引相比,使用 N-gram 解析器创建的全文索引可以搜索到更短的词语,因为它会将文本分成连续的字符片段作为词条。这意味着即使词语的长度小于 ft_min_word_len 参数的值,它们仍然可以被搜索到。

ngram_token_size

MySQL 中使用全局变量ngram_token_size来配置ngram中n的大小,它的取值范围是1到10,默认值是2。通常ngram_token_size设置为要查询的单词的最小字数。如果需要搜索单字,就要把ngram_token_size设置为1。在默认值是2的情况下,搜索单字是得不到任何结果的。因为中文单词最少是两个汉字,推荐使用默认值2。如果你想查询到单个字,那么我们需要设置为1。ngram_token_size的值设置的越小,全文索引占用的空间也越小。一般来说,查询正好等于ngram_token_size的词,速度会更快,但是查询比它更长的词或短语,则会变慢。

-- 显示ngram_token_size的值
show VARIABLES like 'ngram_token_size';

修改方法:在my.ini文件下的 [mysqld] 下面加上 ngram_token_size = 2 即可,当然也可以设置成1。如果是Linux系统则修改my.cnf文件。

索引问题

上面创建的示例中只有content设置了全文索引,要同时查询2个字段,就需要同时对2个字段进行索引,而不是单独再给title字段索引。

-- 删除现有的全文索引
ALTER TABLE articles DROP INDEX idx_content;
-- 添加2个字段的全文索引
ALTER TABLE articles ADD FULLTEXT INDEX idx_title_content (title, content) WITH PARSER ngram;

 

标签:中文,--,全文索引,token,len,ngram,mysql,size
From: https://www.cnblogs.com/yuyanc/p/18134637

相关文章

  • Mysql - 什么是三大范式(通俗详解)
    Mysql-什么是三大范式(通俗详解)高月之风关于数据的一切我都喜欢。​关注他 218人赞同了该文章​展开目录 Hello~我是高月!我将会在这篇文章中用通俗易懂的话为你简单说明什么是Mysql的三大范式。如果喜欢这篇文章,请点赞、关注......
  • 如何解决node.js运行mysql报错?
    首先检查mysql客户端的密码是否正确正确后提示我没有安装mysql模板 在文件目录终端下输入cnpminstall-gmysql进行安装这时候运行还是显示错误上网搜了一下说是登录数据库的客户端跟mysql8.0不兼容了,mysql8.0密码认证采用了新的密码格式[解决方法]打开命令管理器进入m......
  • 关于中文、字符互转
    序知周所众在计算机中,所有的数据在存储和运算时都要使用二进制数表示例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示于是就产生了编码而我国字符编码也有几套标准,如GB2312、GBK、GB18030等脑......
  • MySQL 函数
    汇总函数rolluprollup是SQL关键字,在MySQL中得用withrollup。它是groupby子句的扩展,用于统计后增加一行汇总数据。举例,现有库存表,我们按仓库名称分组,统计每个仓库的产品总量,最后来一个汇总。mysql>SELECT*FROMinventory;+----+---------------+---------+----------......
  • 在centos7下面,安装mysql,并设置 用户名为henry
    好的,以下是在CentOS7下安装MySQL并完成你所要求的操作的详细步骤:1.**安装MySQL**:首先,使用`yum`包管理器安装MySQL:sudoyuminstallmysql-server 2.**启动MySQL服务**:安装完成后,启动MySQL服务:sudosystemctlstartmysqld 3.**设置MySQL开机自启......
  • mysql部署MGB
    基础环境node0:192.168.110.50 -->master节点node1:192.168.110.60node2:192.168.110.70MySQL版本->MySQL8.0.36在每台电脑上配置host名cat>/etc/hosts<<-'EOF'192.168.31.230n0192.168.31.231n1192.168.31.232n2EOF修改对应主机的主机名hostnamectlset......
  • MYSQL 主从同步失败:Slave_SQL_Running: No
    SHOWSLAVESTATUS\G;显示Slave_SQL_Running:No 解决方法:从主服务器查询:  SHOWMASTERSTATUS在从服务器上:changemastertomaster_host='169.254.60.151', #主库的IP地址master_user='slave', #在主库上创建的复制账号master_password='???????',......
  • Docker mysql 配置文件读取失败 [Warning] World-writable config file '/etc/mysql/c
    这个警告表明MySQL正在忽略/etc/mysql/conf.d/my.cnf这个配置文件,因为它被设置为了全世界可写。这个警告是基于安全性的考虑。当配置文件被设置为全世界可写时,任何人都可以修改它,这可能会导致安全风险,因为恶意用户可以更改MySQL的配置,从而影响数据库的行为和安全性。为了......
  • MySQL 8 显示错误代码2058
    在使用mysql-uroot-P3307-proot和SQLyong连接MySQL时报错1.在MySQL8.3CommandLineClient登录点击查看代码Enterpassword:****WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis14Serverversion:8.3.0MySQLCommunitySer......
  • MySQL-09-mysql 存储过程入门介绍
    拓展阅读MySQL00ViewMySQL01Rulermysql日常开发规范MySQL02truncatetable与delete清空表的区别和坑MySQL03Expression1ofORDERBYclauseisnotinSELECTlist,referencescolumnMySQL04EMOJI表情与UTF8MB4的故事MySQL05MySQL入门教程(MySQLtutor......