数据库学习----MySQL 全文索引
数据库学习----MySQL 全文索引
前言
我们在使用
索引的建立方式及销毁方式
创建索引
- 无表的时候创建索引
CREATE TABLE table_name ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, author VARCHAR(200),
title VARCHAR(200), content TEXT(500), FULLTEXT full_index_name (col_name) ) ENGINE=InnoDB;
- 有表的时候创建索引
CREATE FULLTEXT INDEX full_index_name ON table_name(col_name);
删除索引
- 直接删除
DROP INDEX full_idx_name ON db_name.table_name;
- 使用
alter table 的方式删除
DROP INDEX full_idx_name ON db_name.table_name;
使用全文索引查询数据
使用自然语言模式查询
MySQL 默认的分词方法是所有非字母和数字的特殊符号都是分词符( 如果希望对中文进行分词,则可以使用MySQL 内置的ngram 插件) ,对于太短的查询则不会出现结果,默认是3 个字符
-- 自然语言模式查询(默认)
select
*
from
wenan_reptile_official wro
where
match ( content ,
tag ) AGAINST ('在哪里 every man');
上面的match ( content ,tag ) AGAINST ('在哪里 every man');
则是使用全文索引进行搜索
使用拓展模式查询
拓展模式是经过两次全文索引的结果,
第二次搜索使用第一次搜索的结果,让结果更精确。
-- 拓展模式查询
select
*
from
wenan_reptile_official wro
where
match ( content ,
tag ) AGAINST ('在哪里 every man' WITH QUERY expansion);
boolean 模式
+:
表示该word 必须存在
select
*
from
wenan_reptile_official wro
where
match ( content ,
tag ) AGAINST ('+在哪里 -every man' IN BOOLEAN MODE);
-:
表示该word 必须不存在(no operator) 表示该word 是可选的,但是如果出现,其相关性会更高
select
*
from
wenan_reptile_official wro
where
match ( content ,
tag ) AGAINST ('在哪里 every man' IN BOOLEAN MODE);
@distance
表示查询的多个单词之间的距离是否在distance 之内,distance 的单位是字节,这种全文检索的查询也称为Proximity Search
,如MATCH(context) AGAINST('"Pease hot"@30' IN BOOLEAN MODE)
语句表示字符串Pease 和hot 之间的距离需在30 字节内
select
*
from
wenan_reptile_official wro
where
match ( content ,
tag ) AGAINST ('在哪里 "every man"@2' IN BOOLEAN MODE);
-- 表示every,man 两个词之间的距离在2字节以内
>
:表示出现该单词时增加相关性(结果排序)<
:表示出现该单词时降低相关性(结果排序)
select
*
from
wenan_reptile_official wro
where
match ( content ,
tag ) AGAINST ('在哪里 >every <man' IN BOOLEAN MODE);
~
:表示允许出现该单词,但出现时相关性为负( 结果排序)
select
*
from
wenan_reptile_official wro
where
match ( content ,
tag ) AGAINST ('在哪里 ~every man' IN BOOLEAN MODE);
*
:表示以该单词开头的单词,如lik*
, 表示可以是lik
,like
,likes
select
*
from
wenan_reptile_official wro
where
match ( content ,
tag ) AGAINST ('在哪里 every* man' IN BOOLEAN MODE);
- " :表示短语
select
*
from
wenan_reptile_official wro
where
match ( content ,
tag ) AGAINST ('"every man"' IN BOOLEAN MODE);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!