Mysql全文检索

文章详细介绍了如何在MySQL8中创建和管理全文索引,包括使用Navicat工具,指定分词引擎如ngram,以及执行自然语言、布尔和查询扩展搜索。还提到了通过调整配置如ft_min_word_len和ngram_token_size来优化检索性能。
摘要由CSDN通过智能技术生成

先建表添加数据再添加索引效率会更快

建表语句 fulltext是指定要检索的列 可以指定多列后续也可以添加要检索的列

drop table if exists test;

create table test (

id integer not null primary key auto_increment,

body longtext,

fulltext( body) with parser ngram

);

with parser ngram作用是指定分词引擎

建表后添加需要全文检索的字段

ALTER TABLE food ADD FULLTEXT (dish,chef) with parser ngram;

请注意,(dish,chef)它将作为一对。这意味着您只能同时在两个字段上使用全文查询,而不能在任何一个字段上使用。您需要单独指定它们以便独立索引它们。同样,如果您单独索引它们,则不能与多个列进行全文匹配。

使用navicat建立全文索引 指定索引类型 指定解析器用于分词

Mysql8支持三中全文检索

Match是要匹配的列 against是要进行检索的字段

自然语言全文搜索

语法 select * from test where match( body) against ('英语语文' in natural language mode);

其中body为要进行检索字段 英语语文是要检索的内容 只要包含两个连续的字 比如英语 语语 都可以被检索到

布尔全文搜索

SELECT * FROM test WHERE MATCH(body) AGAINST ('+只有 -文2' IN BOOLEAN MODE);

+后面的字段代表应该出现在结果里 -后面的字段代表不应该出现在结果里

查询扩展搜索

SELECT * FROM test WHERE MATCH(body) AGAINST ('11' WITH QUERY EXPANSION);

大概就是进行两次搜索 第一次搜索与11匹配的字段 第二次再根据搜索出来的结果再进行搜索

例根据11搜索出的结果

查询扩展搜索出来的结果

使全文检索检索字符粒度最小,在my.ini文件添加如下配置并重启mysql并重新建立索引

设置默认的最小索引的长度

ft_min_word_len = 1

设置为要查询的单词的最小字数也就是词的大小

ngram_token_size = 1

一般来说,查询正好等于ngram_token_size的词,速度会更快,但是查询比它更长的词或短语,则会变慢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值