MySQL全文索引

MySQL全文索引是MySQL中提供的一种基于全文索引的搜索功能,主要用于在InnoDB或MyISAM表中搜索信息。

创建全文索引

创建全文索引使用FULLTEXT关键字。你可以在创建表时添加全文索引,或者通过修改已有表结构添加全文索引。

在创建表时添加全文索引:

sql 复制代码
CREATE TABLE table_name
(
    column1 datatype,
    column2 datatype,
    ...,
    FULLTEXT (column_name)
);

在已经存在的表上添加全文索引:

sql 复制代码
ALTER TABLE table_name ADD FULLTEXT(column_name);

以上两个SQL语句将在指定的列上创建全文索引。

使用全文索引

全文索引主要使用MATCH()AGAINST()函数来进行搜索操作。

MATCH() 和 AGAINST() 函数:

其基本语法格式为:

sql 复制代码
SELECT column_name(s)
FROM table_name
WHERE MATCH (col1,col2,...) AGAINST (expr [search_modifier]);

其中,

  • MATCH(col1,col2,..): 这部分定义了要在哪些列上进行全文搜索。你可以在一个或多个列上进行全文搜索。
  • AGAINST(expr [search_modifier]): expr 是你要搜索的字符串,search_modifier 是可选项,用于定义搜索模式。
search_modifier 可以是以下几种类型:
  • 在自然语言模式搜索(默认):不使用任何修饰符。
  • 在布尔模式搜索:使用 IN BOOLEAN MODE 修饰符。
  • 在查询扩展模式搜索:使用 WITH QUERY EXPANSION 修饰符。

例:

sql 复制代码
SELECT column_name(s)
FROM table_name
WHERE MATCH (col1) AGAINST ('string to search');

此查询将返回包含"string to search"的所有行,其中搜索发生在列col1上。

MySQL的全文搜索的三种模式

MySQL的全文搜索有三种模式:自然语言模式,布尔模式和查询扩展模式。下面我们将逐一对这三种模式进行说明。

自然语言模式

这是默认的全文搜索模式。在该模式下,MySQL会根据每个单词在整个集合中出现的频率以及它们在给定文档中出现的频率来计算相关性。不允许使用运算符。

sql 复制代码
SELECT column_name(s)
FROM table_name
WHERE MATCH (column_name) AGAINST ('word_to_search');
布尔模式

在此模式下,可以使用布尔运算符,如 +(必须存在)、 -(不能存在)、 < > ~ * " "(引号内的词汇必须作为一个词汇匹配)等,以控制搜索的行为。

sql 复制代码
SELECT column_name(s)
FROM table_name
WHERE MATCH (column_name) AGAINST ('+word1 -word2' IN BOOLEAN MODE);

上述查询将返回所有包含"word1"但不包含"word2"的行。

查询扩展模式

在此模式下,MySQL首先执行自然语言模式搜索,然后再搜索与初步搜索结果最相关的行,并基于这些行生成查询,然后执行第二次搜索并返回结果。

sql 复制代码
SELECT column_name(s)
FROM table_name
WHERE MATCH (column_name) AGAINST ('word_to_search' WITH QUERY EXPANSION);

这样的搜索通常会返回更多的结果,因为它们通过搜索与初步搜索结果相关的词汇来扩展查询。

相关推荐
IvorySQL4 小时前
PostgreSQL 技术日报 (3月11日)|4库合一性能提升350倍与内核新讨论
数据库·postgresql·开源
IvorySQL4 小时前
谁动了我的查询结果?PostgreSQL 联表加锁的隐藏陷阱
数据库·postgresql·开源
爱可生开源社区7 小时前
🧪 你的大模型实验室开张啦!亲手测出最懂你 SQL 的 AI
数据库·sql·llm
赵渝强老师10 小时前
【赵渝强老师】使用TiSpark在Spark中访问TiDB
数据库·mysql·tidb·国产数据库
Qinana12 小时前
第一次用向量数据库!手搓《天龙八部》RAG助手,让AI真正“懂”你
前端·数据库·后端
DolphinDB1 天前
集成 Prometheus 与 DolphinDB 规则引擎,构建敏捷监控解决方案
数据库
IvorySQL1 天前
PostgreSQL 技术日报 (3月10日)|IIoT 性能瓶颈与内核优化新讨论
数据库·postgresql·开源
DBA小马哥1 天前
时序数据库是什么?能源行业国产化替换的入门必看
数据库·时序数据库
爱可生开源社区1 天前
某马来西亚游戏公司如何从 SQL Server 迁移至 OceanBase?
数据库
小瓦码J码2 天前
PostgreSQL表名超长踩坑记
数据库·postgresql