Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Mysql全文索引实现模糊查询

Mysql全文索引实现模糊查询

作者头像
码缘
发布于 2023-03-10 02:00:54
发布于 2023-03-10 02:00:54
1.9K00
代码可运行
举报
文章被收录于专栏:PHP修行之路PHP修行之路
运行总次数:0
代码可运行

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

启动方法

配置mysql的ngram,打开mysql server的配置文件,编辑在[mysqld]下面加入这样的配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# vim /etc/my.cnf
[mysqld]
ngram_token_size=2

查看是否开启

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> show variables like 'ngram_token_size%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| ngram_token_size | 1     |
+------------------+-------+

演示数据表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE `t_testfulltext` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT NULL,
  `data` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `ft_index` (`name`) /*!50100 WITH PARSER `ngram` */ 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

执行语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM t_testfulltext WHERE MATCH (name) AGAINST ('今天');

参考:https://cloud.tencent.com/developer/article/1634247?areaSource=&traceId=

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Mysql全文索引实现模糊查询
基本上所有的产品都离不开模糊搜索,无论是C端的社交产品、或者B端的一些SaaS服务。解决模糊搜索,我们最典型的解决方案是大家都可以想到的,使用SQL的like功能来实现,如下:
netkiddy
2020/05/27
13.5K1
mysql全文索引使用
在以前的博客中小编介绍过mysql的执行流程,索引优化等。正好前一段时间项目有一个新的需求,就重新调研了一下mysql的全文索引,并对mysql的全文索引进行了压测,看看性能怎么样。以判断是否使用。——可想而知,性能不是很好。 下面小编就向大家再说说mysql的全文检索。
全栈程序员站长
2022/06/24
1.5K0
mysql全文索引使用
Mysql 如何实现全文检索,关键词跑分
今天一个同事问我,如何使用 Mysql 实现类似于 ElasticSearch 的全文检索功能,并且对检索关键词跑分?我当时脑子里立马产生了疑问?为啥不直接用es呢?简单好用还贼快。但是听他说,数据量不多,客户给的时间非常有限,根本没时间去搭建es,所以还是看一下 Mysql 的全文检索功能吧! MySQL 从 5.7.6 版本开始,MySQL就内置了ngram全文解析器,用来支持中文、日文、韩文分词。在 MySQL 5.7.6 版本之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成单词,然后存入数据库。本篇文章测试的时候,采用的 Mysql 5.7.6 ,InnoDB数据库引擎。
大道七哥
2020/08/26
6.3K0
Mysql 如何实现全文检索,关键词跑分
like模糊匹配查询慢解决之道——MySQL全文索引
由explain的结果可知,虽然我们给phrase建了索引,但是查询的时候,索引是失效的。
用户6256742
2024/07/15
5700
like模糊匹配查询慢解决之道——MySQL全文索引
故障分析 | MySQL 全文索引触发 OOM 一例
作者:付祥,现居珠海,主要负责 Oracle、MySQL、mongoDB 和 Redis 维护工作。
爱可生开源社区
2024/01/17
2860
故障分析 | MySQL 全文索引触发 OOM 一例
Mysql全文索引的使用
在MySQL 5.6版本以前,只有MyISAM存储引擎支持全文引擎.在5.6版本中,InnoDB加入了对全文索引的支持,但是不支持中文全文索引.在5.7.6版本,MySQL内置了ngram全文解析器,用来支持亚洲语种的分词.
呼延十
2019/08/12
1.2K0
MySQL 全文索引 实现相似度搜索
模糊查询 Mysql实现模糊查询 最简单的是LIKE关键字, 如 SELECT * FROM `content` WHERE `topic` LIKE '%地球%'; 而当然也可以使用LOCATE(),POSITION()等内置函数来实现. 不过 这种模糊查询都存在一定的局限性. 举个🌰: 记录为: 你好,我的世界, 此时通过关键词你好世界 便无法搜索到. 如何解决 在Mysql 5.7.6后 Mysql内置了ngram分词疫情, 可以实现中文, 日文, 韩文的解析. 我们需要对指定字段建立全文索引并指定
xcsoft
2022/02/22
3.6K0
MySQL 全文索引实现简单版搜索引擎
用MATCH() ... AGAINST 方式来进行搜索 match()表示搜索的是那个列,against表示要搜索的是那个字符串
星哥玩云
2022/08/18
1.4K0
MySQL 全文索引
实际开发过程中,我们经常会遇到全文检索的述求,一般都会采用搭建ES服务器来实现。但因为数据量较少,并且不属于高并发高吞吐场景,相比较而言接入 ES,不仅会使得系统设计更加复杂,还会产生资源浪费,所以需要采用更加简单且廉价的方案来实现。一般互联网公司都会用到 MySQL 服务,从 MySQL5.7 开始,MySQL 内置了 ngram 全文检索插件,用来支持中文分词,并且对 MyISAM 和InnoDB 引擎有效。因此可以通过 MySQL 服务接入 full-text 索引来实现简单地全文检索需求。
政采云前端团队
2024/01/17
3930
MySQL 全文索引
MySQL之全文索引详解
通过数值比较、范围过滤等就可以完成绝大多数我们需要的查询,但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较。全文索引就是为这种场景设计的。
猿芯
2021/05/27
5.2K0
MySQL之全文索引详解
Mysql的全文检索
这次碰到一个类似需求处于设计阶段,因为时间充足,需求又简单,就照着官网学习下mysql的全文检索,万一很合适的话,后面就可以多一种备用方案了…
eeaters
2021/12/24
1.8K0
Mysql的全文检索
MySQL 8.0 InnoDB全文索引可用于生产环境吗(续)
0. 背景介绍1. 环境准备2. 导入数据3. 全文搜索测试4. 继续放弃治疗 0. 背景介绍
田帅萌
2020/05/14
1.4K0
MySQL全文索引
MySQL在使用LIKE进行模糊匹配查询的时候,字段索引会失效,因此在数据量较大的情况下,LIKE查询效率极低,就可以使用全文索引(FullText)进行优化。
Petrochor
2022/08/09
6330
第30期:索引设计(全文索引中文处理)
MySQL 全文索引默认是基于单字节流处理的,也就是按照单词与停止词(默认空格或者标点符号)来划分各个关键词,并且把关键词的文档 ID 和位置保存到辅助表用于后期检索。这种对英文,数字类的单字节字符处理很好, 比如“I am a boy!”, 每个单词很明确的用空格分割,后期查询只需要按照以空格为分隔符的单词检索就行,这些我前面三篇文章已经详细讲过。但是这种分割方法对多字节字符比如中文不是很友好,对中文来说每个字就是单独的字,无规律的字可以组成词,但是各个词之间不需要按照空格来分割。举个例子:“为中国人自豪” ,这句话包含了三个词“为”,“中国人”,“自豪”。如果按照默认的全文索引处理,搜索其中任何子句,结果肯定是出不来。这也间接导致大家说 MySQL 的全文检索结果不准确,不靠谱,其实并非如此,主要是 MySQL 全文索引对分词以及停止符界定有差异。例如下面,表 ft_ch ,有三条记录,怎么查都没有没有结果。
爱可生开源社区
2021/07/16
9270
MySQL索引
只有字段的数据类型为char、varchar、text及其系列才可以创建全文索引。
chao超的搬运文章
2023/10/15
3710
MySQL索引
MySQL索引系列:全文索引
试想在1M大小的文件中搜索一个词,可能需要几秒,在100M的文件中可能需要几十秒,如果在更大的文件中搜索那么就需要更大的系统开销,这样的开销是不现实的。
全栈程序员站长
2022/07/25
1.1K0
MySQL索引系列:全文索引
InnoDB全文索引基础
https://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html
保持热爱奔赴山海
2019/09/17
1K0
MySQL如何创建全文索引
MySQL全文索引功能,分为三种:自然语言全文搜索、布尔全文搜索、具有查询扩展的全文搜索。业务生产环境中,不建议使用MySQL进行文本检索类业务的开发。针对大数据检索场景,建议使用更加专业的Elasticsearch技术栈解决方案。
Power
2025/02/28
2320
MySQL学习笔记(四)索引-下篇
前面了解过,MyISAM存储引擎的行数据都存放在MYD文件中,索引文件存放于MYI文件中。由于索引与行记录分开存储,所以MyISAM的索引都是辅助索引,也就是非聚集索引(UnClustered Index)。
scarlett学习手册
2020/02/08
6890
MySQL案例:全文索引浅析
所谓全文索引,就是一种通过建立倒排索引,快速匹配文档内容的方式。和B+树索引一样,倒排索引也是一种索引结构,一个倒排索引是由文档中所有不重复的分词和其所在文档的映射组成。倒排索引一般有两种不同的结构,一种是inverted file index,另一种是full inverted index。
brightdeng@DBA
2021/06/30
3.5K2
MySQL案例:全文索引浅析
相关推荐
Mysql全文索引实现模糊查询
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验