当前位置: 首页 > news >正文

Mysql全文索引

引言

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

一般的数据库搜索都是用的SQL的like语句,like语句是不能利用索引的,每次查询都是从第一条遍历至最后一条,查询效率极其低下。一般数据超过10万或者在线人数过多,like查询都会导致数据库崩溃。这也就是为什么很多程序都只提供标题搜索的原因了,因为如果搜索内容,那就更慢了,几万数据就跑不动了。

Mysql 全文索引是专门为了解决模糊查询提供的,可以对整篇文章预先按照词进行索引,搜索效率高,能够支持百万级的数据检索。

一、全文解析器ngram

ngram就是一段文字里面连续的n个字的序列。ngram全文解析器能够对文本进行分词,每个单词是连续的n个字的序列。
MySQL 中使用全局变量 ngram_token_size 来配置 ngram 中 n 的大小,它的取值范围是1到10,默认值是 2。通常ngram_token_size设置为要查询的单词的最小字数。如果需要搜索单字,就要把ngram_token_size设置为 1。在默认值是 2 的情况下,搜索单字是得不到任何结果的。因为中文单词最少是两个汉字,推荐使用默认值 2。

  • 查看Mysql默认的ngram_token_size大小:
show variables like 'ngram_token_size';
  • 修改ngram_token_size 变量的两种设置方式:
  1. 启动mysqld命令时指定:
mysqld --ngram_token_size=2
  1. 修改mysql配置文件:
[mysqld] 
ngram_token_size=2

注意:修改mysql的配置文件中的ngram_token_size大小,需要重启数据库,且如果之前建有全文索引需要删除重建,因为更改 ngram_token_size 会影响索引的构建方式,从而影响查询结果的准确性和性能。

二、全文索引

  • 建表时创建全文索引:
create table sys_basics_word
(id                   bigint(20) not null comment '主键',chinese              varchar(255) comment '中文',thesaurus            varchar(255) comment '同义词',chinese_meaning      varchar(255) comment '中文含义',english_prototype    varchar(255) comment '英文原型',abbr                 varchar(255) comment '缩写',reference            varchar(255) comment '引用',chinese_and_thesaurus char(10) comment '中文和同义词',create_by            varchar(100) comment '创建者',create_date          datetime comment '创建时间',update_by            varchar(100) comment '更新者',update_date          datetime comment '更新时间',del_flag             char(1) default '0' comment '删除标记',FULLTEXT KEY `chinese_and_thesaurus` (`chinese_and_thesaurus`) WITH PARSER `ngram`,primary key (id)
);
  • 通过 alter table 方式:
ALTER TABLE sys_basics_word ADD FULLTEXT INDEX chinese_and_thesaurus(chinese_and_thesaurus) WITH PARSER ngram;
  • 通过 create index 方式:
CREATE FULLTEXT INDEX chinese_and_thesaurusON sys_basics_word (chinese_and_thesaurus) WITH PARSER ngram;

三、检索模式

  • 自然语言检索(IN NATURAL LANGUAGE MODE)
    自然语言模式是 MySQL 默认的全文检索模式。自然语言模式不能使用操作符,不能指定关键词必须出现或者必须不能出现等复杂查询。

  • 布尔检索(IN BOOLEAN MODE)
    剔除一半匹配行以上都有的词,例如,每行都有this这个词的话,那用this去查时,会找不到任何结果,这在记录条数特别多时很有用,原因是数据库认为把所有行都找出来是没有意义的,这时,this几乎被当作是stopword(中断词);布尔检索模式可以使用操作符,可以支持指定关键词必须出现或者必须不能出现或者关键词的权重高还是低等复杂查询。

全文索引比 like + % 快 N 倍,但是可能存在精度问题
如果需要全文索引的是大量数据,建议先添加数据,再创建索引
MATCH()函数使用的字段名,必须要与创建全文索引时指定的字段名一致,且只能是同一个表的字段不能跨表。

参考文章:
https://www.cnblogs.com/yuyanc/p/18134637
https://blog.csdn.net/weixin_44792849/article/details/123572516

相关文章:

Mysql全文索引

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

配置终端代理

普通的魔法开启之后终端下git clone等命令仍然会无法使用,额外需要手动配置终端代理。 sudo vim /etc/apt/apt.conf.d/99proxyAcquire::http::Proxy "http://127.0.0.1:12334"; Acquire::https::Proxy "http://127.0.0.1:12334";在debian安装时…...

51单片机学习之旅——在LCD1602上显示时钟

新建工程 打开软件 LCD1602模块代码添加 因为我们在LCD1602上显示时钟,因此我们需要添加LCD1602的模块代码 跳转到这条博客51单片机学习之旅——模块化编程集_51单片机ruminant-CSDN博客,复制相关代码跳转到这条博客51单片机学习之旅——模块化编程集…...

Jest单元测试

由于格式和图片解析问题,可前往 阅读原文 前端自动化测试在提高代码质量、减少错误、提高团队协作和加速交付流程方面发挥着重要作用。它是现代软件开发中不可或缺的一部分,可以帮助开发团队构建可靠、高质量的应用程序 单元测试(Unit Testi…...

C++字符串处理指南:从基础操作到性能优化——基于std::string的全面解析

博主将从C标准库中的 std::string 出发,详细探讨字符串的处理方法,涵盖常见操作、性能优化和实际应用场景。以下内容将围绕std::string 的使用展开,结合代码示例进行说明。 一、std::string 的基本操作 1.1 创建与初始化 std::string 提供了…...

JVM类加载过程详解:从字节码到内存的蜕变之旅

一、类加载的意义与整体流程 在Java中,每一个.java文件经过编译都会生成.class字节码文件。但字节码本身并不能直接运行,必须通过 类加载(Class Loading)将其转化为JVM内存中的数据结构,才能被程序调用。 类加载过程就…...

【力扣Hot100详解】解锁“字母异位词分组”:用排序魔法一键通关力扣!

字母异位词分组,力扣第49题,看似是“找不同”的排列游戏,实则是哈希表与字符串处理的经典结合。这道题就像是一把钥匙,能帮你打开“如何高效归类数据”的算法大门。今天,我们就用 Java 带你用“排序魔法”轻松破解它&a…...

vite配置scss全局变量

vite配置scss全局变量 创建单独文件variable.scss在其中定义变量 vite.config.ts中配置 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path// https://vite.dev/config/ export default defineConfig({plugins: [vue()],resolve:…...

Spring Boot01(注解、)---java八股

Spring Boot中常用注解及其底层实现 1、SpringBootApplication注解: SpringBootApplication注解:这个注解标识了一个SpringBoot工程,它实际上是另外三个注解的组合,这三个注解是: aSpringBootConfiguration&#xff1a…...

2.19学习记录

Web easyupload3.0 这是一道构造.htaccess文件的传马 如下&#xff1a; <FilesMatch "jpg">SetHandler application/x-httpd-php </FilesMatch>.htaccess文件可以作为一个解释器&#xff0c;可以将传进去的图片马改为php马上传之后再传个图片马&#…...

汽车免拆诊断案例 | 2013 款奔驰 S300L 车起步时车身明显抖动

故障现象  一辆2013款奔驰S300L车&#xff0c;搭载272 946发动机&#xff0c;累计行驶里程约为15万km。车主反映&#xff0c;将挡位置于D挡&#xff0c;稍微释放一点制动踏板&#xff0c;车辆蠕动时车身明显抖动&#xff0c;类似气缸失火时的抖动&#xff0c;又类似手动变速器…...

【HeadFirst系列之HeadFirst设计模式】第5天之工厂模式:比萨店的秘密武器,轻松搞定对象创建!

工厂模式&#xff1a;比萨店的秘密武器&#xff0c;轻松搞定对象创建&#xff01; 大家好&#xff0c;今天我们来聊聊设计模式中的工厂模式。如果你曾经为对象的创建感到头疼&#xff0c;或者觉得代码中到处都是 new 关键字&#xff0c;那么工厂模式就是你的救星&#xff01;本…...

Redis如何解决热Key问题

目录 **如何解决 Redis 的热 Key&#xff08;Hot Key&#xff09;问题&#xff1f;****解决方案** **1. 使用多级缓存****方案** **2. 进行 Key 预分片&#xff08;Key Sharding&#xff09;****方案** **3. 使用 Redis 复制机制&#xff08;主从复制或集群&#xff09;****方案…...

从开发到部署:EasyRTC嵌入式视频通话SDK如何简化实时音视频通信的集成与应用

嵌入式设备和视频综合管理平台均支持B/S架构。在B/S架构下&#xff0c;传统的视频观看方式依赖于微软的OCX控件&#xff0c;然而OCX控件的使用正面临越来越多的挑战&#xff1a; 首先&#xff0c;用户需要安装浏览器插件、调整浏览器安全级别&#xff0c;并允许ActiveX控件弹出…...

Zookeeper(58)如何在Zookeeper中实现分布式锁?

在 Zookeeper 中实现分布式锁是一种常见的用例。Zookeeper 提供了强一致性、高可用性的分布式协调服务&#xff0c;使得它非常适合用来实现分布式锁。以下是详细的步骤和代码示例&#xff0c;展示如何在 Zookeeper 中实现分布式锁。 1. Zookeeper 分布式锁的基本原理 Zookeep…...

Mac端homebrew安装配置

拷打了一下午o3-mini-high&#xff0c;不如这位博主的超强帖子&#xff0c;10分钟结束战斗 跟随该文章即可&#xff0c;2025/2/19亲测可行 mac 安装HomeBrew(100%成功)_mac安装homebrew-CSDN博客文章浏览阅读10w次&#xff0c;点赞258次&#xff0c;收藏837次。一直觉得自己写…...

Spring 接入 DeepSeek

引入依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency>2.yml配置 spring:ai:openai:api-key: sk-xxxxx // 填写自己申请的keybase-url: http…...

vscode将文件中行尾默认CRLF改为LF

安装prettier npm install --save-dev --save-exact prettier执行命令 npx prettier --write --end-of-line lf .即可将项目中的所有文件行尾序列格式改为lf *在你使用git拉取代码的时候&#xff0c;git会自动将代码当中与你当前系统不同的换行方式转化成你当前系统的换行方…...

python-leetcode 33.排序链表

题目&#xff1a; 给定链表的头结点head,请将其按升序排列&#xff0c;并返回排序后的链表 方法一&#xff1a;自顶向下归并排序 链表自顶向下归并排序的过程&#xff1a; 1.找到链表的中点&#xff0c;以中点为分界&#xff0c;将链表拆分成两个子链表。寻找链表的中点可以…...

【数据结构初阶第十二节】设计循环队列

云边有个稻草人-CSDN博客 必须有为成功付出代价的决心&#xff0c;然后想办法付出这个代价。 还有最后一道关于队列的习题&#xff0c;这题有点难&#xff0c;准备好迎接挑战吧&#xff01; 目录 1.【题目】 2.实现循环队列推荐用数组&#xff0c;Why? 3.Q1&#xff1a;如…...

快速解决SketchUp模型到3D打印的完整方案:STL插件实战指南

快速解决SketchUp模型到3D打印的完整方案&#xff1a;STL插件实战指南 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl 想要将…...

互联网大厂Java求职面试:从Spring Boot到微服务的技术探讨

互联网大厂Java求职面试&#xff1a;从Spring Boot到微服务的技术探讨 在某个阳光明媚的下午&#xff0c;互联网大厂的面试室里&#xff0c;面试官严肃地坐在桌子后面&#xff0c;准备对候选人燕双非进行一轮面试。第一轮提问 面试官&#xff1a;燕双非&#xff0c;你能给我讲讲…...

Pixel Couplet Gen快速上手:Colab Notebook零配置体验像素春联生成

Pixel Couplet Gen快速上手&#xff1a;Colab Notebook零配置体验像素春联生成 1. 项目介绍 Pixel Couplet Gen是一款基于ModelScope大模型驱动的创意春联生成工具。它将中国传统春节元素与复古游戏美学完美融合&#xff0c;为用户带来全新的数字节日体验。 与传统春联生成器…...

DeepSeek大幅下调API价格至全球新低,V4技术升级与昇腾协同助力AI应用规模化

4月26日&#xff0c;DeepSeek官方发布API价格调整公告&#xff0c;全系API输入缓存命中价格降至首发价的十分之一&#xff0c;V4 - Pro更叠加限时2.5折&#xff0c;创全球大模型价格新低。这一举措背后与技术升级和昇腾生态协同有关。价格调整详情本次降价覆盖V4系列全模型&…...

从‘它为什么能跑’到‘怎么让它跑更好’:深入理解LNMP架构与WordPress性能调优

从LNMP架构原理到WordPress性能调优实战 当你的WordPress网站从最初的几十个访问量增长到每天数千甚至上万PV时&#xff0c;是否遇到过页面加载缓慢、服务器响应延迟的问题&#xff1f;这背后往往是LNMP架构中各组件配置不当导致的性能瓶颈。本文将带你深入理解LNMP架构的工作原…...

SYSSPEC框架:规范驱动文件系统开发新范式

1. 文件系统开发的范式革命&#xff1a;从手工编码到规范驱动在操作系统领域&#xff0c;文件系统始终扮演着数据持久化的关键角色。传统开发模式下&#xff0c;开发者需要直接面对底层存储硬件的复杂性&#xff0c;同时还要满足上层应用不断变化的需求。这种双重压力使得文件系…...

python的个人注释分区规范

# # 项目: xxx # 文件: xxx.py # 作者: xxx # 创建时间: 2026-04-27 # 描述: # # # 库导入 # import os import sysimport pandas as pd import numpy as np# from xxx import xxx# # 全局配置 # DEBUG True THRESHOLD 0.05# # 核心函数 # def calc_path(points):"…...

Transformer残差流与内部策略的深度解析

1. Transformer残差流与内部策略的深层解析在深入探讨大语言模型(LLM)的内部工作机制前&#xff0c;我们需要理解Transformer架构中一个关键但常被忽视的组件——残差流(residual stream)。这个信息高速公路贯穿整个模型&#xff0c;承载着从输入到输出的语义演变过程。1.1 残差…...

CnOpenData 税收调查企业发明专利授权质量统计表

税收是支撑国家长期发展的根本基础。作为服务财税改革、加强财税管理的一项重要基础性工作&#xff0c;全国税收调查工作为税收政策制定提供了扎实的数据支撑&#xff1b;同时&#xff0c;它对于学者准确掌握税源情况、窥探经济发展形势起到重要作用。参与全国税收调查的企业分…...

html标签如何防止XSS攻击_特殊字符转义必要性【技巧】

...