MySQL必知必会---第十八章全文本搜索总结
- 全文本搜索
- 全文本查询与LIKE谓语、正则表达式的区别
- 查询拓展 与一般全文本查询的区别
- 布尔全文本查询 与 查询拓展的区别
- 全文本查询的注意要点
- 布尔全文本查询的一些操作符
- 全文本查询的使用说明
全文本搜索
- MySQL常用的引擎为 MyISAM 和 InnoDB,前者支持,后者不支持。
- 为啥?不知道
支持字符搜索的几种方式
LIKE谓语
正则表达式
全文本搜索
创建表,对表进行约束,语法格式: FULLTEXT括号 列名
对该列加索引的数据类型为TEXT
查询语句的关键字为:MATCH 括号列名 AGAINST括号 列名中的字符
全文本搜索
查询扩展
布尔全文本查询
-- 全文本搜索创建表的例子
CREATE TABLE product
( note_id int not null,
note_text text NULL,
PRIMARY KEY(note_id),
FULLTEXT(note_text)
)ENGINE = MyISAM; -- 选择引擎为 MyISAM
-- 一般全文本查询的例子
SELECT note_text
FROM product
WHERE Match(note_text)Against('rabbit');
-- 查询拓展的例子
SELECT note_text
FROM product
WHERE Match(note_text)Against('rabbit' WITH QUERY EXPANSION);
-- 布尔全文本查询的例子
SELECT note_text
FROM product
WHERE Match(note_text)Against('rabbit' IN BOOLEAN MODE);
全文本查询与LIKE谓语、正则表达式的区别
1.全文本查询是按照权重排序的,后两者没有排序
2.全文本查询的速度比后两者快。(我的理解是, 全文本查询是索引,对着目录查知识点比一页一页的查快吧?)
查询拓展 与一般全文本查询的区别
查询拓展的执行原理大概是这样的
- 先进行一般的全文本查询
- 对查询结果,在进行全文本
举个例子:1.用全文本查询 查 rabbit 返回了 一行 the rabiit from China
2.用全文本查询再查 the rabiit from China,返回来的结果就是查询拓展的结果
布尔全文本查询 与 查询拓展的区别
1.布尔文本查询不需要加索引,查询结果有的时候和一般文本查询结果一样
2.布尔全文本查询不会受到查的字符超过文本比重的百分之50的限制而忽略了这个词。
3.布尔全文本查询对查询结果不排序,查询拓展对查询结果排序。
全文本查询的注意要点
1.不区分查询结果的大小写。(除非用BINARY)
2.导入数据时,先不要加索引,导入完了之后再加索引。(这样导入数据的速度快一点)
布尔全文本查询的一些操作符
全文本查询的使用说明
1.使用索引的时候,短词被忽略却从索引中删除(默认为3个或3个字符一下)
2.MySQL带有一个内建的非用词列表(stopword),这些词会在索引全文本数据时被忽略
3.当这个字符出现的太过频繁,超过了百分之50,它也被忽略(布尔全文本除外)
4.如果表中行数少于3行,全文本搜索不返回结果
d),这些词会在索引全文本数据时被忽略
3.当这个字符出现的太过频繁,超过了百分之50,它也被忽略(布尔全文本除外)
4.如果表中行数少于3行,全文本搜索不返回结果
5.忽略词中的单引号