前言
最近复习数据库时到索引部分时,看到了全文检索,虽然平台用到的不是太多,但是出于好奇的心态,还是找了相关资料好好研究了一番,下面将我所学的分享给大家,希望对你们能有所帮助。
一、全文索引是什么?
通俗点来说,全文检索主要同于搜索引擎中,像百度搜索、谷歌搜索等以及其他的大数据搜索,像我们平时建立的数据库(数据量不是很大的情况),基本用不到全文检索,用普通的查询就能满足大部分需求,扯了这么多没用的,下面开始进入正题
二、使用步骤
1.建立数据表
其中FULLTEXT KEY
full
(
empName
,
empPass
,
empPhone
)意思是为这三个字段设置全文索引
Create Table
CREATE TABLE `emp` (
`empId` int NOT NULL AUTO_INCREMENT,
`empName` varchar(255) NOT NULL,
`empPass` varchar(255) NOT NULL,
`empPhone` varchar(255) NOT NULL,
PRIMARY KEY (`empId`),
FULLTEXT KEY `full` (`empName`,`empPass`,`empPhone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
除此外还可以直接通过数据库视图软件直接建立,我用的是SQLyog,如下:
建完表后插入四条数据
INSERT INTO emp(empName,empPass,empPhone) VALUES('a','123456','13245878952');
INSERT INTO emp(empName,empPass,empPhone) VALUES('aa','123456','13245878952');
INSERT INTO emp(empName,empPass,empPhone) VALUES('aaa','123456','13245878952');
INSERT INTO emp(empName,empPass,empPhone) VALUES('aaaa','123456','13245878952');
关于这里为啥插入四条,看完下面的你就明白了
2.查询数据
代码如下(示例):全文检索的查询方式和普通查询方式是不一样的,全文检索是使用match和against关键字进行查询的,而match中的列必须要和设置全文索引的列对应,至于against中则填写的是你要查询的内容
SELECT * FROM emp WHERE MATCH(empName,empPass,empPhone) AGAINST('a');
输入这段查询代码后,正常的思维应该是查询出四条数据,但是结果却是一条都没查出来
3.原因分析
造成这种原因的是因为InnoDB的默认机制,其默认为输入的查询体的长度只能在4~84之间,这就是常见的
最小搜索长度
而我们刚才输入的a 却只有一个长度,所以是查询不到的,同理,输入两个a和三个a也是查询不到的,这里我就不贴出代码了,你们可以自己尝试一下。但是,当你输入四个a时,查询内容就出来啦,原因就是因为四个a的长度刚好为四,满足这个条件。初次外还有一个原因就是如果你数据库中的数据小于四条的话,那么也是查不出来的,同上面最小搜索长度一样,也是因为默认配置的原因,这里我就不介绍了,直接带大家来修改默认配置。
SHOW VARIABLES LIKE '%ft%'
3.修改配置
mysql中的全文索引相关参数无法进行动态修改,只能通过修改配置文件来完成,修改最小搜索的长度为1的配置。在my.ini中的mysqld中添加以下代码
[mysqld]
innodb_ft_min_token_size = 1
ft_min_word_len = 1
添加完配置后需要重启mysql服务,并且进行索引修复
-
索引修复
直接输入这行代码就完事(这里的emp是表名称)
repair table emp quick;
-
重启mysql服务器
点击win+x——》然后再点击G就行了,不同的计算机点的字母不一样,总之就是打开计算机管理
或者直接鼠标放在计算机上然后右键 有个管理,打开就行,然后找到服务
右击mysql选择重新启动就行啦。
4.进行测试
分别输入1到4个a,都能显示结果,但是结果就只有一条,如果想获取多条,需要换一种写法,用布尔全文检索
select * from emp where match(empName,empPass,empPhone) against('a*' in boolean mode);
我这里之所以显示三条,是因为id为1的数据刚才被我删了,正常的话是有四条数据的。
5.布尔全文检索
再用布尔全文检索时,我们可以自定义检索体的相关性,可以通过一些前缀修饰符来定制搜索。
mysql中内置的修饰符常用的有下面几个
-
+
必须包含该词 -
–
必须不包含该词 -
>
提高该词的相关性,查询的结果靠前 -
<
降低该词的相关性,查询的结果靠后 -
(*)星号
通配符,只能接在词后面
更多的解释可以问问度娘
三、总结
写了这么多,也到了该总结的时候了,首先就是自己得多练习几次,因为如果只是跟着博客写一遍的话效果不是很理想,你要多变化几个查询体条件来进行查询,其次就是要多看看其他的相关博客,然后自己进行总结,能让自己真正的理解,好了,要说的就这么多,祝大家都能学有所成。