day8 -- 全文本搜索

news2025/1/13 15:51:53

brief

InnoDB存储引擎从MySQL 5.6开始支持全文本搜索。具体来说,MySQL使用InnoDB存储引擎的全文本搜索功能称为InnoDB全文本搜索(InnoDB Full-Text Search)。InnoDB全文本搜索支持标准的全文本搜索查询语法和多语言分词器,因此可以处理包括汉字在内的多种字符集。


LIKE关键字,它利用通配操作符匹配文本能够查找包含特殊值或部分值的行(不管这些值位于列
内什么位置)。

使用正则表达式,可以编写查找所需行的非常复杂的匹配模式。

但是他们有限制:

  • 性能——通配符和正则表达式匹配通常要求MySQL尝试匹配表中所有行(而且这些搜索极少使用表索引)。因此,由于被搜索行数不断增加,这些搜索可能非常耗时。
  • 明确控制——使用通配符和正则表达式匹配,很难(而且并不总是能)明确地控制匹配什么和不匹配什么。

为了进行全文本搜索,必须索引被搜索的列,而且要随着数据的改变不断地重新索引。
在索引之后, SELECT可与Match()和Against()一起使用以实际执行搜索。

一般在创建表时启用全文本搜索。 CREATE TABLE语句接受FULLTEXT子句,它给出被索引列的一个逗号分隔的列表。

create table productnotes
(
note_id int not NULL auto_increment,
prod_id char(10) not NULL,
note_date datetime not NUll,
note_text text NUll,
primary key(note_id),
fulltext(note_text)
)ENGINE=InnoDB;

这些列中有一个名为note_text的列,为了进行全文本搜索,MySQL根据子句FULLTEXT(note_text)的指示对它进行索引。
这里的FULLTEXT索引单个列,如果需要也可以指定多个列。
在定义之后, MySQL自动维护该索引。在增加、更新或删除行时,索引随之自动更新。

进行全文本搜索

在索引之后,使用两个函数Match()和Against()执行全文本搜索
其中Match()指定被搜索的列, Against()指定要使用的搜索表达式。

select note_text from productnotes
where match(note_text) against('rabbit');

# 可以试试这句口令
select note_text, match(note_text) against('rabbit') AS rank;

Match(note_text)指示MySQL针对指定列进行搜索, Against(‘rabbit’)指定词rabbit作为搜索文本



使用查询扩展

比如,你想找出所有提到anvils的注释。只有一个注释包含词anvils,但你还想找出可能与你的搜索有关的所有其他行,即使它们不包含词 anvils。

这也是查询扩展的一项任务。在使用查询扩展时, MySQL对数据和索引进行两遍扫描来完成搜索:

  • 首先,进行一个基本的全文本搜索,找出与搜索条件匹配的所有行;
  • 其次, MySQL检查这些匹配行并选择所有有用的词(我们将会简要地解释MySQL如何断定什么有用,什么无用)。
  • 再其次, MySQL再次进行全文本搜索,这次不仅使用原来的条件,而且还使用所有有用的词。
select note_text from productnotes
where match(note_text) against('rabbit' with query expansion);


布尔文本搜索

即 使 没 有 定 义FULLTEXT索引,也可以使用它。但这是一种非常缓慢的操作(其性能将随着数据量的增加而降低)。

# 此全文本搜索检索包含词rabbit的所有行
select note_text from productnotes
where match(note_text) against('rabbit' IN BOLLEAN MODE);

# 匹配包含rabbit但不包含任意以rope开始的词的行
select note_text from productnotes
where match(note_text) against('rabbit -rope*' IN BOLLEAN MODE);

在这里插入图片描述

全文本搜索注意事项

  • 在索引全文本数据时,短词被忽略且从索引中排除。短词定义为那些具有3个或3个以下字符的词(如果需要,这个数目可以更改)。
  • MySQL带有一个内建的非用词( stopword)列表,这些词在索引全文本数据时总是被忽略。如果需要,可以覆盖这个列表
  • 许多词出现的频率很高,搜索它们没有用处(返回太多的结果)。因此, MySQL规定了一条50%规则,如果一个词出现在50%以上 的行中,则将它作为一个非用词忽略。 50%规则不用于IN BOOLEAN MODE。
  • 如果表中的行数少于3行,则全文本搜索不返回结果(因为每个词或者不出现,或者至少出现在50%的行中)。
  • 忽略词中的单引号。例如, don’t索引为dont。
  • 不具有词分隔符(包括日语和汉语)的语言不能恰当地返回全文本搜索结果。

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

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

相关文章

useCallback使用注意

背景 useCallback的作用时基于依赖项缓存函数,但是这个缓存时取值缓存而不是按照地址缓存,这导致了如果缓存的函数使用的值依赖外部某个变量,这个变量只会取第一次用到的值 例子 具体可以看https://codesandbox.io/s/misty-night-vds9oo?…

JavaScript:箭头函数与普通函数的区别与适用场景

文章目录 1 箭头函数与普通函数的区别1.1 语法上的区别1.2 this指向的区别1.3 arguments对象的区别1.4 箭头函数不能用作构造函数 2 箭头函数和普通函数的适用场景2.1 普通函数的适用场景2.1.1 构造函数2.1.2 方法2.1.3 回调函数 2.2 箭头函数的适用场景2.2.1 简答的回调函数2.…

IIS配置URL重写,http重定向https

文章目录 1️⃣ URL重写1.1 URL重写插件下载1.2 URL重写插件安装1.3 URL重写插件配置 优质资源分享 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/131004077 IIS配置URL重写,http重定向https,ht…

【计算机图形学】【代码复现】A-SDF中的数据集制作与数据生成

Follow A-SDF 的Data Generation部分: We follow (1) ANSCH to create URDF for shape2motion dataset (1-2) URDF2OBJ(本人认为是1-2之间需要进行的重要的过渡部分) (2) Manifold to create watertight meshes (3) and modified mesh_to_sdf…

CPLEX Studio 集成开发环境 (IDE) 介绍

CPLEX Studio 集成开发环境 (IDE) 介绍 参考B站视频:cplex入门到精通 1.CPLEX Studio IDE 实现的功能 IBM ILOG CPLEX Studio IDE 是一个用于数学规划、约束规划以及一般组合优化应用程序的集成开发环境。 它是适用于 OPL(优化编程语言)和…

PointNetGPD使用手册

1.创建环境配置环境变量 mkdir -p $HOME/code/ cd $HOME/code/ - Set environment variable PointNetGPD_FOLDER in your $HOME/.bashrc file. export PointNetGPD_FOLDER$HOME/code/PointNetGPD 2.安装 1. Install pcl-tools via sudo apt install pcl-tools. 2. An e…

在家当了几年废物,庆幸自己当初进了软件测试这行~

为什么会学习软件测试? 28岁了,仔细算一下6年了,工作了一年,没去工作就一直待在家,家里固定每个月给几千元,偶尔会都给一些,但依旧没钱,家里给我买了一套房子,出门300米…

【刷题之路Ⅱ】LeetCode 739. 每日温度

【刷题之路Ⅱ】LeetCode 739. 每日温度 一、题目描述二、解题1、方法1——暴力法1.1、思路分析1.2、代码实现 2、方法2——单调栈2.1、思路分析2.2、先将栈实现一下2.3、代码实现 一、题目描述 原题连接: 739. 每日温度 题目描述: 给定一个整数数组 tem…

ChatGPT 使用 拓展资料:吴恩达大咖 基于LangChain的LLM应用程序开发-1

ChatGPT 使用 拓展资料:吴恩达大咖 基于LangChain的LLM应用程序开发 基于LangChain的LLM应用程序开发 LangChain for LLM Application Development [https://www.deeplearning.ai/short-courses/langchain-for-llm-application-development/] 基于LangChain的LLM应用程序开发…

干货|SpringCloud之注册中心如何选用

SpringCloud的框架并不陌生了,在业内微服务领域的扛把子。今天来看一看如何根据业务需要,来选择合适的注册中心? 注册中心是微服务管理节点通信、核心配置的关键组件,从分布式多节点的前提下最主要要解决是就是分布式下的一致性问…

教你领取免费的亚马逊云服务服务器并搭建服务器环境的方法教程

本篇文章主要讲解,亚马逊新用户注册领取亚马逊免费服务器的详细操作流程方法,以及如何规避免费服务器到期后自动续费的问题解决办法。 作者:任聪聪 日期:2023年6月2日 前提材料准备 1.需要先准备好你的亚马逊账号注册所需的手机号、邮箱、vi…

18-Vue3中一些新的组件

目录 1、Fragment2、Teleport3、Suspense 1、Fragment 在Vue2中: 组件必须有一个根标签在Vue3中: 组件可以没有根标签, 内部会将多个标签包含在一个Fragment虚拟元素中好处: 减少标签层级, 减小内存占用 2、Teleport 什么是Teleport?—— Teleport 是一种能够将我…

一个开源的基于golang开发的企业级物联网平台

SagooIOT是一个基于golang开发的开源的企业级物联网基础开发平台。负责设备管理和协议数据管理,支持跨平台的物联网接入及管理方案,平台实现了物联网开发相关的基础功能,基于该功能可以快速的搭建起一整套的IOT相关的业务系统。旨在通过可复用…

测试4年,费时8个月,入职阿里,涨薪14K,可算是熬出头了····

前言 你的努力,终将成就无可替代的自己 本科毕业后就一直从事测试的工作,和多数人一样,最开始从事功能测试(所谓的点点点)的工作,看着自己的同学一步一步往上走,自己还是在原地踏步,…

java打jar包并包装成exe解压即用

1首先找到要加载的main方法类 public static void main(String[] args) { //创建该对象则调用构造方法,对象实现ActionListener则自动调用actionPerformed()方法new PicdealMain();}2.点击 idea:File->Project Struce…(快捷键…

MyBatis深入学习总结(1.0)

MyBatis总结 MyBatis入门操作 简介 原始jdbc操作(查询数据) 原始jdbc操作(插入数据) 原始jdbc操作的分析 原始jdbbc开发存在的问题如下: 数据库连接创建、释放频繁造成系统资源的浪费从而影响系统性能sql语句在代…

3年经验,面试测试开发岗25K都拿不到了吗?这么坑?

最近后台读者说自己最近在疯狂投简历,有的石沉大海,但还好不是全军覆没。前两天好不容易熬到了阿里的四面,跟我聊了一下,面试官拿哪些题为难了他? 前面几题还好,问的是有关JVM的一些问题,比如说…

一道Java经典面试题 99%都有可能做错

前言 最近在面试中遇到一个关于位运算的题目 如下图 请问这个aString打印值是多少 学过位运算我们都知道 9<<4位 用2进制表示就是0000 1001 如果按照我之前的算法就是 0000 10001 向左位运算4 得到 1001 0000 这个时候我们得到的值就是 12816 144 拿到144这个值我们再…

session.upload_progress文件包含漏洞

session.upload_progress文件包含漏洞 前言 之前学习了该漏洞&#xff0c;但是没有做笔记&#xff0c;导致容易遗忘。在此用一个题目来理解session.upload_progress漏洞 基础知识 session存储 我们在phpinfo可以看到session的存储路径&#xff1a; 以下是一些session在lin…

【Python文本处理】基于运动路线记录GPX的文件解析,GPX转SRT字幕文件(不需要安装三方库)

【Python文本处理】基于运动路线记录GPX的文件解析&#xff0c;GPX转SRT字幕文件&#xff08;不需要安装三方库&#xff09; 解析和转换 GPX文件格式 GPX文件本身其实就是坐标、海拔、时间、心率等综合性的xml文件 如图&#xff1a; 海拔&#xff1a;ele 时间&#xff1a;t…