前言:
如今姐妹们对“mysql汉化版”大致比较关怀,你们都需要分析一些“mysql汉化版”的相关文章。那么小编也在网络上搜集了一些关于“mysql汉化版””的相关知识,希望小伙伴们能喜欢,你们快快来学习一下吧!前言
通常情况下,全文检索引擎我们一般会用ES组件(传送门:SpringBoot系列——ElasticSearch),但不是所有业务都有那么大的数据量、那么大的并发要求,MySQL5.7之后内置了ngram分词器,支持中文分词,使用全文索引,即可实现对中文语义分词检索
MySQL支持全文索引和搜索: MySQL中的全文索引是FULLTEXT类型的索引。 全文索引只能用于InnoDB或MyISAM表,并且只能为CHAR、VARCHAR或TEXT列创建。 MySQL5.7提供了一个内置的全文ngram解析器,支持中文,日文和韩文(CJK),以及一个可安装的MeCab日文全文解析器插件。 FULLTEXT索引定义可以在创建表时在CREATE TABLE语句中给出,也可以稍后使用ALTER TABLE或CREATE INDEX添加。 对于大型数据集,将数据加载到一个没有FULLTEXT索引的表中,然后在此之后创建索引,比将数据加载到一个已有FULLTEXT索引的表中要快得多。
MySQL全文检索官方文档介绍:
查看MySQL版本
-- 查看mysql版本select VERSION()
创建game游戏表,并插入数据
CREATE TABLE `game` ( `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '游戏名') ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
PS:insert into插入数据sql语句略,可以前往原文查看
全文索引
可以在mysql的配置文件my.ini中修改ngram的分词数(默认2)
ngram_token_size=2
需要重启服务器并重新构建FULLTEXT索引
创建
示例:为game表的name字段创建全文索引
-- 创建全文索引CREATE FULLTEXT INDEX ft_index ON game (name) WITH PARSER ngram使用
语法
MATCH (col1,col2,...) AGAINST (expr [search_modifier])search_modifier: { IN NATURAL LANGUAGE MODE | IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION | IN BOOLEAN MODE | WITH QUERY EXPANSION }
示例:
-- 默认使用自然语言模式:IN NATURAL LANGUAGE MODE-- '刀剑危机',分词结果:'刀剑'、'危机'select name from game WHERE MATCH (name) AGAINST ('刀剑危机')
-- 使用布尔模式:IN BOOLEAN MODE,+和-操作符分别指示一个单词必须存在或不存在,才能进行匹配,'危机*',则表示匹配危机开头的记录select name from game WHERE MATCH (name) AGAINST ('+危机 -孤岛' IN BOOLEAN MODE)删除
-- 查询某个表中的索引show index from game-- 删除索引drop index ft_index on game后记
通过全文索引、配合ngram全文解析器,可以实现对中文语义分词检索,在数据量不大、并发要求不高的情况下足够满足我们业务需要,无需上ES全文检索引擎
版权声明
作者:huanzi-qch
出处:
若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.
标签: #mysql汉化版