MySQL-MATCH ... AGAINST工具

在MySQL中,MATCH……AGAINST是全文索引(Full-Text index)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜索和布尔搜索模式。以下是MATCH……AGAINST的详细用法和示例

一、全文索引的基本概念

  • 全文索引适用于CHAR、VARCHAR和TEXT类型的列

  • 全文索引支持自然语言搜索和布尔搜索

  • 全文索引只能用于MyISAM和InnoDB存储引擎(MySQL5.6及以上版本支持InnoDB的全文索引)

二、创建全文索引

在需要使用全文索引的列上创建全文索引

示例:

CREATE TABLE articles (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    FULLTEXT (title, content)  -- 在title和content列上创建全文索引
);

三、自然语言搜索

自然语言搜索是全文索引的默认模式。它会根据搜索词的相关性返回结果

SELECT * FROM table_name 
WHERE MATCH(column1, column2, ...) AGAINST('search_term');

示例:

-- 插入数据
INSERT INTO articles (title, content) VALUES
('MySQL Tutorial', 'This is a tutorial about MySQL.'),
('Advanced MySQL', 'Learn advanced techniques in MySQL.'),
('PostgreSQL vs MySQL', 'A comparison between PostgreSQL and MySQL.');
​
-- 自然语言搜索
SELECT * FROM articles 
WHERE MATCH(title, content) AGAINST('MySQL');
  • 结果:

    • 返回包含MySQL的记录,并按相关性排序

    • 相关性得分可以通过MATCH……AGAINST的结果获取:

    SELECT id, title, MATCH(title, content) AGAINST('MySQL') AS score 
    FROM articles 
    WHERE MATCH(title, content) AGAINST('MySQL');

四、布尔搜索

布尔搜素允许使用特定的操作符来精确控制搜索行为

语法:

SELECT * FROM table_name 
WHERE MATCH(column1, column2, ...) AGAINST('search_term' IN BOOLEAN MODE);

常用操作符:

  • +:必须包含该词。

  • -:必须不包含该词。

  • *:通配符,匹配以指定词开头的词。

  • "":短语搜索,匹配完整短语。

  • ():分组操作符。

示例:

-- 必须包含MySQL,且不包含PostgreSQL
SELECT * FROM articles 
WHERE MATCH(title, content) AGAINST('+MySQL -PostgreSQL' IN BOOLEAN MODE);
​
-- 包含MySQL或PostgreSQL
SELECT * FROM articles 
WHERE MATCH(title, content) AGAINST('MySQL PostgreSQL' IN BOOLEAN MODE);
​
-- 包含以My开头的词
SELECT * FROM articles 
WHERE MATCH(title, content) AGAINST('My*' IN BOOLEAN MODE);
​
-- 包含完整短语"MySQL Tutorial"
SELECT * FROM articles 
WHERE MATCH(title, content) AGAINST('"MySQL Tutorial"' IN BOOLEAN MODE);

五、相关性排序

全文索引会为每条记录计算一个相关性得分(Relevance Score),可以根据得分对结果进行排序。

示例:

SELECT id, title, MATCH(title, content) AGAINST('MySQL') AS score 
FROM articles 
WHERE MATCH(title, content) AGAINST('MySQL') 
ORDER BY score DESC;

六、全文索引的限制

  • 最小词长度:默认情况下,MySQL全文索引会忽略长度小于4的词。可以通过修改ft_min_word_len(MyISAM)或innodb_ft_min_token_size(InnoDB)参数调整

  • 停用词:全文索引会忽略常见的停用词(如theand等)。可以通过修改ft_stopword_file参数自定义停用词列表。

  • 中文支持:MySQL的全文索引对中文支持较差,通常需要配合分词工具(如ngram)使用。

七、 配置全文索引

修改最小词长度:

-- 查看当前配置
SHOW VARIABLES LIKE 'innodb_ft_min_token_size';
​
-- 修改配置(需要重启MySQL)
SET GLOBAL innodb_ft_min_token_size = 2;

使用ngram分词器(支持中文):

-- 创建表时指定ngram分词器
CREATE TABLE articles (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    FULLTEXT (title, content) WITH PARSER ngram
);
​
-- 查询时使用ngram分词器
SELECT * FROM articles 
WHERE MATCH(title, content) AGAINST('关键词' IN BOOLEAN MODE);

八、 删除全文索引

如果需要删除全文索引,可以使用以下语法:

ALTER TABLE table_name DROP INDEX index_name;

示例:

ALTER TABLE articles DROP INDEX title;

九. 全文索引的性能优化

  • 索引列选择:只为需要搜索的列创建全文索引,避免不必要的索引开销。

  • 分词器选择:对于中文搜索,使用ngram分词器。

  • 缓存结果:对于高频查询,可以将结果缓存到Redis等缓存系统中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/978912.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 数据增删改查

一、插入数据 1.1 insert插入数据 (1)insert语法格式 INSERT [INTO] 表名 [字段名] VALUES (值列表);(2)示例 ① 向学生表中插入一行数据 ② 向学生表中插入多行数据 二、更新数据 2.1 update更新数据 (1&…

基于flask+vue框架的的医院预约挂号系统i1616(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:用户,医生,科室信息,就诊信息,医院概况,挂号信息,诊断信息,取消挂号 开题报告内容 基于FlaskVue框架的医院预约挂号系统开题报告 一、研究背景与意义 随着医疗技术的不断进步和人们健康意识的日益增强,医院就诊量逐年增加。传统的现场…

专业的UML开发工具StarUML

专业的UML开发工具StarUML 可靠的软件建模软件StarUML StarUML 是一款支持统一建模语言 (UML)框架的开源建模软件。它提供了几种类型的图表,并允许用户生成多种语言的代码。在它的帮助下,软件开发人员可以创建设计、概念和编码解决方案。但是&#xff0…

转化率(漏斗分析)——mysql计算过程

转化率(漏斗分析)——mysql计算过程 问题:有一张表,记录了不同用户的用户id,浏览页面时间,加入购物车时间,下单时间,支付时间,算出每天的各个环节的转化率 创建表info(含用户id,浏…

【Oracle专栏】sqlplus显示设置+脚本常用显示命令

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.内容概述 本文主要针对oracle 运维中常用知识点进行整理,包括: 1)sqlplus模式下,为了方便查询设置相应的行宽、列宽、行数。…

基于SpringBoot的“同城宠物照看系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“同城宠物照看系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 局部E-R图 系统首页界面 系统…

为什么要将PDF转换为CSV?CSV是Excel吗?

在企业和数据管理的日常工作中,PDF文件和CSV文件承担着各自的任务。PDF通常用于传输和展示静态的文档,而CSV因其简洁、易操作的特性,广泛应用于数据存储和交换。如果需要从PDF中提取、分析或处理数据,转换为CSV格式可能是一个高效…

docker简介-学习与参考

docker Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱…

Linux网络之传输层协议(UDP,TCP协议)

目录 重新认识端口号 端口号划分 netstat pidof UDP协议 UDP的特点 面向数据报 UDP的缓冲区 全双工和半双工 TCP协议 TCP的特点 TCP报头分析 源端口,目标端口,数据偏移(报文首部长度) 序号 确认号 窗口 6个标志位 ACK SYN …

【Python 入门基础】—— 人工智能“超级引擎”,AI界的“瑞士军刀”,

欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创&#x1…

Minio分布式多节点多驱动器集群部署

Minio分布式多节点多驱动器集群部署 Minio分布式多节点多驱动器集群部署节点规划先决条件开放防火墙端口设置主机名更新域名映射文件时间同步存储要求内存要求 增加虚拟机磁盘(所有机器都要执行)部署分布式 MinIO测试上传与预览测试高可用MinIO 配置限制模拟单节点磁盘故障模拟…

开源工具推荐:Checkmate监控

1. 概述 GitHub:bluewave-labs/Checkmate: Checkmate is an open-source, self-hosted tool designed to track and monitor server hardware, uptime, response times, and incidents in real-time with beautiful visualizations. 官网文档:Welcome …

Unity报错:InvalidOperationException: Insecure connection not allowed

Unity报错:InvalidOperationException: Insecure connection not allowed 介绍问题原因解决方案方案一:Unity配置文件修改方案二:将网址做备案和证书认证 总结 介绍 最近在做抖音小程序的升级(官方换新API),框架的加载…

linux中安装部署Jenkins,成功构建springboot项目详细教程

参考别人配置Jenkins的git地址为https,无法连上github拉取项目,所以本章节介绍通过配置SSH地址来连github拉取项目 目录: 1、springboot项目 1.1 创建名为springcloudproject的springboot项目工程 1.2 已将工程上传到github中,g…

idea + Docker + 阿里镜像服务打包部署

一、下载docker desktop软件 官网下载docker desktop,需要结合wsl使用 启动成功的画面(如果不是这个画面例如一直处理start或者是stop需要重新启动,不行就重启电脑) 打包成功的镜像在这里,如果频繁打包会导致磁盘空间被占满,需…

cpp中的继承

一、继承概念 在cpp中,封装、继承、多态是面向对象的三大特性。这里的继承就是允许已经存在的类(也就是基类)的基础上创建新类(派生类或者子类),从而实现代码的复用。 如上图所示,Person是基类&…

MySQL - Navicat自动备份MySQL数据

对于从事IT开发的工程师,数据备份我想大家并不陌生,这件工程太重要了!对于比较重要的数据,我们希望能定期备份,每天备份1次或多次,或者是每周备份1次或多次。 如果大家在平时使用Navicat操作数据库&#x…

el-input实现金额输入

需求&#xff1a;想要实现一个输入金额的el-input&#xff0c;限制只能输入数字和一个小数点。失焦数字转千分位&#xff0c;聚焦转为数字&#xff0c;超过最大值&#xff0c;红字提示 效果图 失焦 聚焦 报错效果 // 组件limitDialog <template><el-dialog:visible.s…

基于 C++ Qt 的 Fluent Design 组件库 QFluentWidgets

简介 QFluentWidgets 是一个基于 Qt 的 Fluent Designer 组件库&#xff0c;内置超过 150 个开箱即用的 Fluent Designer 组件&#xff0c;支持亮暗主题无缝切换和自定义主题色。 编译示例 以 Qt5 为例&#xff08;Qt6 也支持&#xff09;&#xff0c;将 libQFluentWidgets.d…

Metal学习笔记八:纹理

到目前为止&#xff0c;您已经学习了如何使用片段函数和着色器为模型添加颜色和细节。另一种选择是使用图像纹理&#xff0c;您将在本章中学习如何操作。更具体地说&#xff0c;您将了解&#xff1a; • UV 坐标&#xff1a;如何展开网格&#xff0c;以便可以对其应用纹理。 •…