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

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等缓存系统中。

相关文章:

MySQL-MATCH ... AGAINST工具

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

微服务合并

有的团队为了节约机器成本、有的团队为了提升研发效率、有的团队为了降低人均服务数 微服务合并,可以从多个角度入手 代码重构融合:人工拷贝代码、解决冲突,然后分阶段实施迁移重构。代码合并打包:将多个代码仓库,拉取…...

Shell脚本基础:用Bash自动化任务

Shell脚本基础:用Bash自动化任务 在Linux运维中,手动执行重复性任务既耗时又容易出错,而Shell脚本则为自动化提供了强大支持。 从基础概念到实用案例,逐步掌握用Bash实现自动化的核心技能。Shell脚本是Linux自动化的基石&#xf…...

基于W2605C语音识别合成芯片的智能语音交互闹钟方案-AI对话享受智能生活

随着科技的飞速发展,智能家居产品正逐步渗透到我们的日常生活中,其中智能闹钟作为时间管理的得力助手,也在不断进化。基于W2605C语音识别与语音合成芯片的智能语音交互闹钟,凭借其强大的联网能力、自动校时功能、实时天气获取、以…...

【Java项目】基于Spring Boot的网上商城购物系统

【Java项目】基于Spring Boot的网上商城购物系统 技术简介:采用Java技术、Spring Boot框架、MySQL数据库等实现。 系统简介:系统实现管理员:首页、个人中心、用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理&#x…...

开放标准(RFC 7519):JSON Web Token (JWT)

开放标准:JSON Web Token 前言基本使用整合Shiro登录自定义JWT认证过滤器配置Config自定义凭证匹配规则接口验证权限控制禁用session缓存的使用登录退出单用户登录Token刷新双Token方案单Token方案 前言 JSON Web Token (JWT) 是一种开放标准…...

JBoltAI_SpringBoot如何基于Deepseek官网API区分 R1大模型深度思考和具体回答的内容?

R1大模型推出后,Deepseek官网的API也更新了,我们可以看到 chat 接口的响应数据结果里多了一个reasoning_content 字段 于是我们的JBoltAI SDK 以及 SpringBoot版以及Jfinal版JBoltAI Platform 迅速跟进,提供了对深度思考的支持:…...

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-model.py

model.py ultralytics\models\yolo\model.py 目录 model.py 1.所需的库和模块 2.class YOLO(Model): 3.class YOLOWorld(Model): 1.所需的库和模块 # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/licensefrom pathlib import Pathfrom ult…...

MySQL 事务笔记

MySQL 事务笔记 目录 事务简介事务操作事务四大特性并发事务问题事务隔离级别总结 事务简介 事务(Transaction)是数据库操作的逻辑单元,由一组不可分割的SQL操作组成。主要用于保证: 多个操作的原子性(要么全部成功…...

react使用拖拽,缩放组件,采用react-rnd解决

项目中需求,要求给商品图片添加促销标签,并且可拉伸大小,和拖拽位置 最后选择用react-rnd来实现 话不多说,直接上代码!!! 1.在项目根目录下执行以下代码,引入react-rnd yarn add r…...

【C++基础】什么是C++?

本文收录于 《C编程入门》专栏,从零基础开始,介绍C编程入门相关的内容,欢迎关注,谢谢! 文章目录 一、前言二、发展简史三、主要特性四、应用场景五、第一个C程序六、总结 一、前言 为了让初学者快速的了解C语言&#…...

3 算法1-3 火星人

题目描述 一个火星人用一个人类的手演示了如何用手指计数。如果把五根手指――拇指、食指、中指、无名指和小指分别编号为 1,2,3,4 和 5,当它们按正常顺序排列时,形成了 5 位数 12345,当你交换无名指和小指的位置时,会形成 5 位数…...

【原创工具】同文件夹PDF文件合并 By怜渠客

【原创工具】同文件夹PDF文件合并 By怜渠客 原贴:可批量合并多个文件夹内的pdf工具 - 吾爱破解 - 52pojie.cn 他这个存在一些问题,并非是软件内自主实现的PDF合并,而是调用的pdftk这一工具,但楼主并没有提供pdftk,而…...

数据结构-直接插入和希尔排序

这次,我们来讲数据结构的排序的直接插入。 一:排序的思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 相当于,我们打牌如上图…...

vue3表单验证的时候访问接口如果有值就通过否则不通过.主动去触发校验

页面有个身份证号码的校验。校验完身份证格式是否符合之后还要去访问接口查询这个用户是否存在。如果存在才通过验证。否则就校验不通过 <el-form ref"ruleFormRef" :model"form" label-width"140px" label-position"right" label…...

Trae根据原型设计稿生成微信小程序密码输入框的踩坑记录

一、需求描述 最近经常使用Trae生成一些小组件和功能代码&#xff08;对Trae赶兴趣的可以看之前的文章《TraeAi上手体验》&#xff09;&#xff0c;刚好在用uniapp开发微信小程序时需要开发一个输入密码的弹框组件&#xff0c;于是想用Trae来实现。原型设计稿如下&#xff1a;…...

【数据结构】 最大最小堆实现优先队列 python

堆的定义 堆&#xff08;Heap&#xff09;是一种特殊的完全二叉树结构&#xff0c;通常分为最大堆和最小堆两种类型。 在最大堆中&#xff0c;父节点的值总是大于或等于其子节点的值&#xff1b; 而在最小堆中&#xff0c;父节点的值总是小于或等于其子节点的值。 堆常用于实…...

基于多层感知机(MLP)实现MNIST手写体识别

实现步骤 下载数据集处理好数据集确定好模型&#xff08;初始化模型参数等等&#xff09;确定优化函数&#xff08;损失函数也称为目标函数&#xff09;和优化方法&#xff08;一般选用随机梯度下降 SDG &#xff09;进行模型的训练进行模型的评估 import torch import torch…...

QT和有道词典有冲突,导致内存溢出,闪退。

提示&#xff1a;本文为学习记录&#xff0c;若有疑问&#xff0c;请联系作者。 前言 具体详细查看此博主&#xff1a;原文链接 在使用Qt Designer时&#xff0c;如果开启了有道词典&#xff0c;会导致Qt Designer崩溃。估计应该是把有道词典屏幕取词功能打开后&#xff0c;有…...

4. 示例:创建带约束的随机地址生成器(范围0x1000-0xFFFF)

文章目录 前言代码示例&#xff1a;运行方法&#xff1a;查看结果&#xff1a;关键功能说明&#xff1a;扩展功能建议&#xff1a; 前言 以下是一个完整的SystemVerilog测试平台示例&#xff0c;包含约束随机地址生成、日志输出和波形生成功能&#xff1a; 代码示例&#xff1…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注&#xff1a;文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件&#xff1a;STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...

java+webstock

maven依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.3.5</version></dependency><dependency><groupId>org.apache.tomcat.websocket</groupId&…...