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);
相关推荐
toooooop84 小时前
MySQL source导入实战:踩坑记,phpMyAdmin 502、source导入巨慢问题解决
mysql
hasty6 小时前
Origin 校验不是身份认证:MySQL MCP Server 漏洞给 AI 平台的警告
数据库·mysql·安全
JavaPub-rodert9 小时前
Docker 安装 MySQL 完整教程:从零部署数据库,到生产环境持久化配置
数据库·mysql·docker
隔窗听雨眠9 小时前
MySQL整库迁移至KaiwuDB完全指南:从数据类型映射到生产切换的系统性实践
数据库·mysql
2301_322414280410 小时前
活力孕康复APP 47737- 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·mysql·微信小程序·idea·微信开发者工具
醉颜凉10 小时前
RedisSearch 全文检索:中文分词、索引构建与搜索结果排序
全文检索·中文分词·索引构建·搜索排序·redissearch
YIAN14 小时前
手撸社区后端:一套可落地的用户 - 文章 - 互动体系 MySQL 表设计与优化思路
后端·mysql
码农学院14 小时前
零售电商GEO踩坑复盘:把 MySQL 商品库自动映射成 Product Schema 的完整方案
人工智能·mysql·零售·geo
ShineWinsu17 小时前
对于MySQL:索引的解析
linux·数据库·mysql·面试·笔试·索引·海量数据
天天喝旺仔18 小时前
Elasticsearch 全文检索实战:Lucene 倒排索引与 NoSQL 文档检索落地
elasticsearch·搜索引擎·全文检索·nosql·lucene