mysql全文索引 分词_mysql全文索引____内置分词变量

本文介绍了MySQL全文索引的工作原理,特别是其内置分词变量ft_boolean_syntax的作用。通过示例展示了如何使用通配符在布尔模式下进行搜索,以匹配包含特定前缀的关键词。全文索引只能搜索到包含ft_boolean_syntax变量片段开头的字符串。
摘要由CSDN通过智能技术生成

上一节,我们发现搜索'a',但是发现'aa','aaa','aaaa'搜索不出来。为什么呢?

这就涉及到mysql的一个内置变量ft_boolean_syntax。ft_boolean_syntax

Variable_name    Value

ft_boolean_syntax    + ->

该变量的意思,表示需要被全文索引的字段通过以上这些变量进行分词切分。

譬如有一段字符串"a,b,c,ab",如果用mysql的内部分词算法,将这段字符串切分的话,会被切分为四段,分别是:a

b

c

ab

然后根据这四段进行索引存储。然后我们匹配的时候,是直接拿需要搜索的和这四段字符串进行等值匹配。

所以,我们搜索a关键字,只会搜索到a,却无法搜索到ab。但是,我们要想搜索到ab怎么办呢?也是可以用全文索引的通配符的,在布尔模式下搜索a*就能匹配到。

同理,我们再模拟上次的数据CREATE TABLE mysql_fulltext

(id BIGINT UNSIGNED AUTO_INCREMENT,

text_info VARCHAR(1000) NOT NULL,

PRIMARY KEY(id),

FULLTEXT(text_info)

)ENGINE=MYISAM DEFAULT CHARSET utf8 COMMENT 'mysql全文索引测试表';

INSERT INTO `mysql_fulltext`(text_info)  VALUES ('a'),('b'),('c'),('aa'),('bb'),('cc'),('aaa'),('bbb'),('ccc'),('aaaa'),('bbbb'),('cccc');

同样,我们先执行下面的sql语句SELECT * FROM `mysql_fulltext` WHERE MATCH(text_info) AGAINST('a');

发现只能搜索到a所在的行。

但是,我们通过布尔模式下,搜索a*来尝试改变sql语句SELECT * FROM `mysql_fulltext` WHERE MATCH(text_info) AGAINST('a*' IN BOOLEAN MODE);

发现结果如下:

ca7b538b7a9df1aa2827cc22d3306196.png

看到,已经能够搜索到a,aa,aaa,aaaa了。

但是,我们我们再次写入如下数据INSERT INTO `mysql_fulltext`(text_info)  VALUES  ('ba'),('ca');

再次执行SELECT * FROM `mysql_fulltext` WHERE MATCH(text_info) AGAINST('a*' IN BOOLEAN MODE);

发现无法搜索出ba和ca所在的行。

为什么呢?因为ba和ca两个字符串都没有ft_boolean_syntax    + ->

包含涉及到的变量,所以,无法被mysql的全文索引引擎切分为独立的分词进行存储。

我们再次写入如下数据INSERT INTO `mysql_fulltext`(text_info)  VALUES  ('b,a'),('c,a');

再次执行SELECT * FROM `mysql_fulltext` WHERE MATCH(text_info) AGAINST('a*' IN BOOLEAN MODE);

发现结果如下:

1048405deedb446a9f5f656d87ecbceb.png

已经能搜索出'b,a'和'c,a'所在的行。

注意:全文索引并不是能搜索出字符串里面的任意字符,只能搜索出有ft_boolean_syntax变量的片段开头的字符串。如ba,无法通过a进行搜索,但是b,a却可以通过a进行搜索;b,abc可以通过布尔模式下的a*进行搜索,也可以通过布尔模式下的b*进行搜索,但是无法通过布尔模式下的c*进行搜索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值