MYSQL5.7 全文检索中文无返回数据

在MySQL 5.7.6之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成单词,然后存入数据库。

从MySQL 5.7.6开始,MySQL内置了ngram全文解析器,用来支持中文、日文、韩文分词。

本文使用的MySQL 版本是5.7.22,InnoDB数据库引擎。

1.修改my.ini文件,增加ngram 解析器,增加ngram_token_size= 2,然后重启MYSQL服务

复制代码
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 13306
#mysql-5.7.43-winx64的路径
basedir = D:\install\mysql\mysql-5.7.44-winx64  #修改为自己的数据库解压路径
#mysql-5.7.43-winx64的路径+\data
datadir = D:\install\mysql\mysql-5.7.44-winx64\data   #修改为自己的数据库存储路径
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 创建模式
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
ft_min_word_len = 1
ngram_token_size= 2

2.创建带索引表:

复制代码
CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title VARCHAR (200),
    body TEXT,
    FULLTEXT (title) WITH PARSER ngram
) ENGINE = INNODB;

或修改表添加索引

复制代码
drop index ft_title on articles;

create fulltext index ft_title  on articles(title)  WITH PARSER ngram;

3.查询验证

复制代码
SELECT * FROM articles WHERE MATCH (title) AGAINST ('上海 故事' IN NATURAL LANGUAGE MODE);

SELECT * FROM articles WHERE MATCH (title) AGAINST ('上海 故事' IN BOOLEAN MODE);
相关推荐
xcLeigh22 分钟前
Python 项目实战:用 Flask 实现 MySQL 数据库增删改查 API
数据库·python·mysql·flask·教程·python3
Fleshy数模1 小时前
MySQL 表创建全攻略:Navicat 图形化与 Xshell 命令行双模式实践
linux·mysql
Nandeska1 小时前
15、基于MySQL的组复制
数据库·mysql
AllData公司负责人2 小时前
AllData数据中台-数据同步平台【Seatunnel-Web】整库同步MySQL同步Doris能力演示
大数据·数据库·mysql·开源
醇氧3 小时前
【docker】mysql 8 的健康检查(Health Check)
mysql·docker·容器
lekami_兰3 小时前
MySQL 长事务:藏在业务里的性能 “隐形杀手”
数据库·mysql·go·长事务
爱学英语的程序员5 小时前
面试官:你了解过哪些数据库?
java·数据库·spring boot·sql·mysql·mybatis
·云扬·6 小时前
MySQL Redo Log落盘机制深度解析
数据库·mysql
码界筑梦坊6 小时前
330-基于Python的社交媒体舆情监控系统
python·mysql·信息可视化·数据分析·django·毕业设计·echarts
千寻技术帮7 小时前
10327_基于SpringBoot的视频剪辑咨询网站
mysql·源码·springboot·代码·视频咨询