【MySQL必知必会(十五)】【全文本搜索】

上一篇:【MySQL必知必会(十四)】【组合查询】

+++++++++++++开始线++++++++++++++++

一、 理解全文本搜索

几个重要的限制:
1.性能:通配符和正则表达式匹配通常要求MySQL尝试匹配表中所有行。因此,由于被搜索行数不断增加,这些搜索可能非常耗时
2.明确控制:使用通配符和正则表达式匹配,很难明确地控制匹配什么和不匹配什么
3.智能化的结果:虽然基于通配符和正则表达式的搜索提供了非常灵活的搜索,但它们都不能提供一种智能化的选择结果的方法

二、 使用全文本搜索

为了进行全文本搜索,必须索引被搜索的列,而且要随着数据的改变不断地重新索引。在对表列进行适当设计后,MySQL会自动进行所有的索引和重新索引。
在索引之后,SELECT可与Match()和Against()一起使用以实际执行搜索。

2.1启用全文本搜索支持

一般在创建表时启用全文本搜索。CREATE TABLE接受FULLTEXT子句,它给出被索引列的一个逗号分隔的列表

mysql> CREATE TABLE productnotes
    -> (
    -> note_id int NOT NULL AUTO_INCREMENT,
    -> prod_id char(10) NOT NULL,
    -> note_date datetime NOT NULL,
    -> note_text text NULL,
    -> PRIMARY KEY(note_id),
    -> FULLTEXT(note_text)
    -> )ENGINE=MyISAM;

不要再导入数据时使用FULLTEXT

更新索引要花时间,虽然不是很多,但毕竟要花时间。应该首先导入所有数据,然后再修改表,再定义FULLTEXT。

2.2 进行全文本搜索

Match()指定被搜索的列,Against()指定要使用的搜索表达式

mysql> SELECT note_text
    -> FROM productnotes
    -> WHERE Match(note_text) Against('rabbit');

在这里插入图片描述

使用完整的Match()说明

传递给Match()的值必须与FULLTEXT()定义中的相同。如果指定多个列,则必须列出它们并且次序正确

上个例子也可以简单地用LIKE子句完成

mysql> SELECT note_text
    -> FROM productnotes
    -> WHERE note_text LIKE '%rabbit%';

在这里插入图片描述

2.4 布尔文本搜索

在这里插入图片描述

MySQL支持全文本搜索的另外一种形式,称为布尔方式

mysql> SELECT note_text
    -> FROM productnotes
    -> WHERE Match(note_text) Against('heavy' IN BOOLEAN MODE);

在这里插入图片描述

匹配包含heavy但不包含任意以rope的开始的词的行

mysql> SELECT note_text
    -> FROM productnotes
    -> WHERE Match(note_text) Against('heavy -rope*' IN BOOLEAN MODE);

在这里插入图片描述

搜索包含rabbit和bait的行

mysql> SELECT note_text
    -> FROM productnotes
    -> WHERE Match(note_text) Against('+rabbit +bait' IN BOOLEAN MODE);

在这里插入图片描述

没有指定操作符,这个搜索匹配包含rabbit和bait中的至少一个词的行

mysql> SELECT note_text
    -> FROM productnotes
    -> WHERE Match(note_text) Against('rabbit bait' IN BOOLEAN MODE);

在这里插入图片描述

匹配短语rabbit bait

mysql> SELECT note_text
    -> FROM productnotes
    -> WHERE Match(note_text) Against('"rabbit bait"'IN BOOLEAN MODE);

在这里插入图片描述

匹配rabbit和carrot,增加前者的等级,降低后者的等级

mysql> SELECT note_text
    -> FROM productnotes
    -> WHERE Match(note_text) Against('>rabbit <carrot' IN BOOLEAN MODE);

在这里插入图片描述

2.5 全文本搜索的使用说明

1.在索引全文本数据时,短词被忽略且从索引中排除
2.MySQL带有一个内建的非用词列表,这些词在索引全文本数据时总是被忽略
3.如果表中的行数小于3行,则全文本搜索不返回结果
4.忽略词中的单引号
5.仅在MyISAM数据库引擎中支持全文本搜索

+++++++++++++结束线++++++++++++++++

下一篇:【MySQL必知必会(十六)】【插入数据】

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值