MySQL 全文索引

简述

MySQL 全文索引是一种用于搜索文本内容的索引技术。它允许在 MySQL 数据库中执行高效的全文搜索操作,而不仅仅是简单的精确匹配。

全文索引可以用于在文本字段(如 VARCHAR 或 TEXT 类型的字段)中查找特定的关键词、短语或表达式。它有助于提高搜索的速度和准确性,并支持高级搜索功能,如模糊匹配、近似匹配和排序。

要使用全文索引,首先需要在要搜索的表中创建全文索引。可以通过使用 FULLTEXT 索引类型并指定要索引的列来实现。例如,假设我们有一个包含标题和内容的文章表,可以如下创建全文索引。

CREATE FULLTEXT INDEX idx_fulltext_search ON articles(title, content);

创建完全文索引后,可以使用 MATCH AGAINST 语句执行全文搜索。MATCH AGAINST 语句接受一个搜索条件作为参数,并返回与条件匹配的行。

例如,以下是在文章表中执行全文搜索的示例。

SELECT * FROM articles WHERE MATCH(title, content) AGAINST('keyword');

在上面的示例中,keyword 是要搜索的关键词。

注意,全文索引只能用于 MyISAM 和 InnoDB 存储引擎,而不适用于其他存储引擎(如 MEMORY 或 CSV)。此外,全文索引还受到MySQL 版本和配置的限制,因此在使用全文索引之前,需要先了解和确认 MySQL 版本和配置是否支持。

创建全文索引的语法

CREATE FULLTEXT INDEX index_name ON table_name ( column_name ) [ WITH PARSER parser_name]

index_name 是要创建的索引的名称,table_name 是要创建索引的表的名称,column_name 是要创建索引的列的名称。WITH PARSER 子句是可选的,并且可以用于指定在创建索引时要使用的解析器。

全文索引只能用于 CHAR、VARCHAR、TEXT 和 BLOB 类型的字段。此外,在 MySQL 5.6 版本以前,全文索引只支持 MyISAM 存储引擎,而在 MySQL 5.6 版本以后,InnoDB 存储引擎也支持全文索引。

ngram 解析器

内置的 FULLTEXT 解析器通过查找特定的分隔符来确定单词的开始和结束位置,例如:空格、逗号、点号。如果单词之间没有分隔符(例如中文),则内置的 FULLTEXT 解析器无法确定单词的开始或结束位置。

这时可以使用 ngram 解析器插件(用于中文、日文或韩文)或 MeCab 解析器插件(用于日文)创建 FULLTEXT 索引。

自然语言模式和布尔模式

在 MySQL 中,全文搜索支持两种主要的查询模式:自然语言模式和布尔模式。这两种模式的主要区别在于它们如何处理搜索查询和返回结果。

自然语言模式(IN NATURAL LANGUAGE MODE)

全文搜索中的自然语言模式是默认模式,它使用自然语言处理技术来解析搜索查询并返回最相关的结果。自然语言模式会对搜索查询进行分词和停用词处理,并根据每个词语在文档中的重要性对文档进行打分。然后,MySQL 会根据文档的得分对搜索结果进行排序,并返回最相关的文档。

注意,自然语言模式并不要求查询的短语必须完全匹配,所以在准确率上存在一定的误差。

布尔模式(IN BOOLEAN MODE)

全文搜索中的布尔模式允许用户使用布尔运算符(AND、OR、NOT)来组合搜索条件,并通过对文档进行匹配来确定文档是否符合查询条件。在布尔模式下,MySQL 会将搜索查询视为布尔表达式,并使用布尔运算符来确定每个文档是否符合查询条件。

综上所述,自然语言模式和布尔模式都有各自的优缺点,在使用全文搜索时,应根据具体情况选择合适的查询模式。

  • 自然语言模式通常更易于使用和理解,但可能会导致一些不准确的结果
  • 布尔模式更灵活,可以更精确地控制搜索条件,但需要更多的查询语法知识

全文索引中常用的操作符

布尔模式操作符

  • "+"符号:指定关键词必须存在
  • "-"符号:指定关键词不能存在
  • ">"符号:指定关键词要求存在,并且在搜索结果中具有更高的权重
  • "<"符号:指定关键词要求存在,并且在搜索结果中具有更低的权重
  • "*"符号:用于在关键词的末尾表示通配符,例如用于匹配单词的不同形态

自然语言操作符

  • IN NATURAL LANGUAGE MODE 关键词:用于指定自然语言模式的全文搜索。在这种模式下,搜索引擎会根据自然语言的语法和语义进行匹配

全文索引与 LIKE

全文索引和 LIKE 操作都可以用于文本搜索,但它们有一些关键的区别。

全文索引是一种更高级的搜索方法,它使用特定的数据结构和算法来支持快速和高效的文本搜索。全文索引在搜索过程中考虑了词语的语义和上下文,可以实现更准确的匹配和更高的搜索性能。它支持高级搜索功能,如模糊匹配、近似匹配和排序,并且通常比使用 LIKE 更快。

相比之下,LIKE 操作是 SQL 中使用的一种基本的模式匹配方法。它根据通配符(如 % 和 _)来匹配字符串,并返回与匹配模式相符的结果。但是,LIKE 操作通常比全文索引更慢,尤其是在大型数据集上,因为它需要在整个文本字段上进行逐一比较。

全文索引的优点是可以快速查找特定的关键词、短语或表达式,而且在搜索过程中可以更好地理解文本的上下文关系。它适用于需要更高级搜索功能和更高性能的场景,例如全文搜索引擎或文本检索系统。

然而,如果只需要简单的模式匹配,而不需要考虑文本的语义或上下文关系,那么使用 LIKE 操作可能是足够的。

简单示例

CREATE TABLE `schools` (`id` BIGINT ( 0 ) NOT NULL AUTO_INCREMENT,`name` VARCHAR ( 512 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '学校名称',`pinyinName` VARCHAR ( 1024 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '学校名称拼音',`shortName` VARCHAR ( 256 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '简称, 多个用逗号隔开',`pinyinShortName` VARCHAR ( 512 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '简称拼音',`regionId` BIGINT ( 0 ) NOT NULL COMMENT '地区id',PRIMARY KEY ( `id` ) USING BTREE,INDEX `schools_region_id` ( `regionId` ) USING BTREE,FULLTEXT INDEX `schools_name` ( `name` ) WITH PARSER `ngram`,FULLTEXT INDEX `schools_pinyin_name` ( `pinyinName` ),FULLTEXT INDEX `schools_short_name` ( `shortName` ) 
) ENGINE = INNODB AUTO_INCREMENT = 1 CHARACTER 
SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '学校表' ROW_FORMAT = Dynamic;SELECT`id`,`name`,`shortName`,`pinyinName`,`stages`,`regionId` 
FROM`schools` AS `SchoolModel` 
WHERE( MATCH ( NAME ) AGAINST ( '+深圳市 +大鹏 +新区 +大鹏 +中心小学 深圳市大鹏新区大鹏中心小学' IN BOOLEAN MODE ) OR NAME LIKE '%深圳市大鹏新区大鹏中心小学%' ) AND `SchoolModel`.`regionId` IN ( 1 );

参考资料

  • https://zhuanlan.zhihu.com/p/645566230
  • http://blog.itpub.net/70024922/viewspace-2929188/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WinForm】WinForm程序C#分屏显示

文章目录 前言1. 准备工作2. 步骤3 示例代码4. 结论 前言 在开发WinForm应用程序时&#xff0c;有时我们需要在另一个屏幕上显示与主界面内容相同的界面。本文将介绍如何使用C#克隆正在运行的界面&#xff0c;并在另一个屏幕上显示相同的内容。 1. 准备工作 在开始之前&…

无需编程技术,快速搭建个人网站

如果你想拥有一个属于自己的个人网站&#xff0c;但又没有任何编程经验&#xff0c;别担心&#xff0c;我们今天将为你介绍一个简单的方法&#xff0c;让你轻松搭建网站&#xff0c;无需任何编程知识。让我们一起来看看吧&#xff01; 在乔拓云建站工具中&#xff0c;自带了许多…

FMC子卡解决方案:FMC214-基于FMC兼容1.8V IO的Full Camera Link 输出子卡

FMC214-基于FMC兼容1.8V IO的Full Camera Link 输出子卡 一、板卡概述   基于FMC兼容1.8V IO的Full Camera Link 输出子卡支持Base、Middle、Full Camera link信号输出&#xff0c;兼容1.8V、2.5V、3.3V IO FPGA信号输出。适配xilinx不同型号开发板和公司内部各FMC载板。北…

ArcGIS Pro怎么生成高程点

一般情况下&#xff0c;我们从公开渠道获取到的高程数据都是DEM数据&#xff0c;但是如果要用到CAD等软件内则需要用到高程点&#xff0c;那么如何从DEM提取高程点呢&#xff0c;这里为大家介绍一下生成方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是…

centos7、ky10_server(arm版、x86版)将程序做成系统服务

前提条件 提供启动脚本、停止脚本 启动脚本 生成app启动脚本 touch app_start.sh cat > app_start.sh << EOF chmod -R 777 /home/tuners/ginkgo7000webcd /home/tuners/ginkgo7000web/apache-tomcat/bin./startup.sh EOF停止脚本 生成app停止脚本 touch app_stop.s…

使用 TensorFlow FasterRCNN 网络进行目标检测

目录 描述 此示例的工作原理 处理输入图形 数据准备 sampleUffFasterRCNN 插件 验证输出 TensorRT API 层和操作 TensorRT API 层和操作 先决条件 运行示例 示例 --help 选项 附加资源 许可 变更记录 已知问题 本示例&#xff0c;sampleUffFasterRCNN&#xff0…

windows下git clone时出现“Filename too long”错误的解决办法

在windows下&#xff0c;当使用git clone复制项目时&#xff0c;出现下述错误表示项目中有文件民字符过长的问题&#xff0c;需要开启git的长路径支持解决&#xff1a; fatal: cannot create directory at xxxx: Filename too long warning: Clone succeeded, but checkout fa…

Pycharm安装jupyter和d2l

安装 jupyter: jupyter是d2l的依赖库&#xff0c;没有它就用不了d2l pycharm中端输入pip install jupyter安装若失败则&#xff1a; 若网速过慢&#xff0c;则更改镜像源再下载&#xff1a; pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ pip …

ChatGPT-自然语言处理模型

前言 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种自然语言处理模型&#xff0c;具有强大的文本生成和理解能力。 使用场景 它可以用于各种场景&#xff0c;包括但不限于&#xff1a; 1. 自动文本生成&#xff1a;GPT可以生成连贯、流畅的文章、故…

中国长城-安全防护-硬件,软件,细粒度权限划分-等级保护,人员意识

目录 等级保护 安全防护 中国长城-安全防护 硬件&#xff0c;软件&#xff0c;细粒度权限划分-等级保护&#xff0c;人员意识 等级保护 安全防护 建立安全管理制度&#xff1a;制定信息安全政策&#xff0c;明确安全管理职责&#xff0c;建立安全培训和考核机制&#xff0c…

视频闪闪,探店带货系统,精细化顺序混剪,故事影视解说,视频处理大全,精细化顺序混剪,多场景裂变,多视频混剪

视频闪闪&#xff0c;探店带货系统&#xff1a;精细化顺序混剪与故事影视解说的艺术 在当今的数字时代&#xff0c;视频已成为一种强大的营销工具。探店带货系统更是将视频的魅力发挥到极致。今天&#xff0c;我们将探讨如何在视频中突出主题&#xff0c;进行探店带货&#xf…

【斗罗二】戴华斌再次打脸,王冬对战嗜血魔熊,仙琳儿神秘登场

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料&#xff0c;《绝世唐门》22集预告最新爆料&#xff0c;在上一集中&#xff0c;我们见证了戴华斌因输给霍雨浩而耿耿于怀&#xff0c;此次他下定决心动用家族的力量来挑战霍雨浩。然而&#xff0c;他…

【设计模式】第12节:结构型模式之“外观模式”

一、简介 门面模式&#xff0c;也叫外观模式&#xff0c;英文全称是Facade Design Pattern。门面模式为子系统提供一组统一的接口&#xff0c;定义一组高层接口让子系统更易用。 目的&#xff1a;简化复杂系统的交互方式 特点&#xff1a;提供一个统一的交互接口 二、UML类…

人工智能基础_机器学习013_三种梯度下降对比_线性回归梯度下降更新公式_对梯度下降函数求偏导数_得到---人工智能工作笔记0053

这里批量梯度下降,就是用准备的所有样本数据进行梯度下降计算. 然后小批量梯度下降就是使用比如我一共有500个样本,那么我从中拿出50个样本进行梯度下降计算. 然后随机梯度下降,更厉害, 从一共有500个样本中,随机的取一个样本进行梯度下降计算, 首先我们看批量梯度下降,使用…

设计融合_ c#

单例模式 using System; namespace DesignIntegration{ public class TimeManager{ private static TimeManager _instance; private static readonly Object locker new Object(); private TimeManager() { } public static TimeManager…

基于springboot实现游戏分享网站系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现游戏分享网站演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把游戏分享管理与现在网络相结合&#xff0c;利用java技术建设游戏分享网站&#xff0c;实现游戏分享的信息化。则对于进一步提高游戏分享管理发展&#xff0c;丰富游戏分享管理经验能起到…

windows内存取证-中等难度-下篇

上文我们对第一台Target机器进行内存取证&#xff0c;今天我们继续往下学习&#xff0c;内存镜像请从上篇获取&#xff0c;这里不再进行赘述​ Gideon 攻击者访问了“Gideon”&#xff0c;他们向AllSafeCyberSec域控制器窃取文件,他们使用的密码是什么&#xff1f; 攻击者执…

Elasticsearch实战:常见错误及详细解决方案

Elasticsearch实战&#xff1a;常见错误及详细解决方案 1.read_only_allow_delete":“true” 当我们在向某个索引添加一条数据的时候&#xff0c;可能&#xff08;极少情况&#xff09;会碰到下面的报错&#xff1a; {"error": {"root_cause": [{&…

Python-文件操作

目录 一、文件的打开与关闭 1、文件的打开 2、文件模式 3、文件的关闭 二、文件的读写 1、写文件 2、读文件 3、文件的定位读写 三、文件的重命名和删除 1、文件的重命名 2、文件的删除 四、文件夹的相关操作 1、创建文件夹 2、获取当前目录 3、改变默认目录 4、…

等你加入!文心开发者说分享者招募全面开启

《文心开发者说》已经开播一个月了&#xff0c;在这段时间里&#xff0c;许多开发者们分享了自己的切身实战经历&#xff0c;了解到作为“先锋”的开发者们对于开发应用的独特心得与见解。 我们期待更多开发者的加入&#xff0c;分享您的开发心得与技巧&#xff0c;对行业动态…