MySQL知识学习——第十八天:全文本搜索

前言

新的一天,加油呀

理解全文本搜索

前面我们学习了利用关键字LIKE,结合通配符来实现文本搜索,另外,我们还学习了基于正则表达式来检索记录。尽管他们很实用,但是还存在一些限制。

  1. 性能——通配符和正则表达式匹配通常要求MySQL尝试匹配表中所有行(而且这些搜索极少使用表索引)。因此,由于被搜索行数不断增加,这些搜索可能非常耗时
  2. 明确控制——使用通配符和正则表达式匹配,很难(而且并不总是能)明确地控制匹配什么和不匹配什么。例如,指定一个词必须匹配,一个词必须不匹配,而一个词仅在第一个词确实匹配的情况下才可以匹配或者才可以不匹配
  3. 智能化的结果——虽然基于通配符和正则表达式的搜索提供了非常灵活的搜索,但它们都不能提供一种智能化的选择结果的方法。例如,一个特殊词的搜索将会返回包含该词的所有行,而不区分包含单个匹配的行和包含多个匹配的行(按照可能是更好的匹配来排列它们)。类似,一个特殊词的搜索将不会找出不包含该词但包含其他相关词的行

所有这些限制以及更多的限制都可以用全文本搜索来解决。在使用全文本搜索时, MySQL不需要分别查看每个行,不需要分别分析和处理每个词。 MySQL创建指定列中各词的一个索引,搜索可以针对这些词进行。这样, MySQL可以快速有效地决定哪些词匹配(哪些行包含它们),哪些词不匹配,它们匹配的频率,等等

使用全文本搜索

为了进行全文本搜索,必须索引被搜索的列,而且要随着数据的改变不断地重新索引

启用全文本搜索支持

一般在创建表时启用全文本搜索。 CREATE TABLE语句(第21章中介绍)接受FULLTEXT子句,它给出被索引列的一个逗号分隔的列表。

什么是create table语句呢?初看我们会记得比较陌生,但是实际上我们早就接触过了。
在这里插入图片描述
随便打开一个之前我们创建好的表,右边就是对应创建表格的语句,知识我们没有直接写而已。

看下面的例子
在这里插入图片描述
上面例子中的搜索引擎是MyISAM,而之前我们创建表的搜索引擎是InnoDB,这个是有区别的。

在这里插入图片描述

在定义之后, MySQL自动维护该索引。在增加、更新或删除行时,索引随之自动更新。

全文本搜索的优势就是会创建索引,并会自动更新。

在这里插入图片描述

进行全文本搜索

在索引之后,使用两个函数Match()和Against()执行全文本搜索,其中Match()指定被搜索的列, Against()指定要使用的搜索表达式。

看下面的例子

在这里插入图片描述
用法和我们之前学习的类似,知识where子句中使用了Match函数和Against函数。

此SELECT语句检索单个列note_text。由于WHERE子句,一个全文本搜索被执行。 Match(note_text)指示MySQL针对指定的列进行搜索, Against(‘rabbit’)指定词rabbit作为搜索文本。由于有两行包含词rabbit,这两个行被返回。

在这里插入图片描述
全文本搜索的一个重要部分就是对结果排序。具有较高等级的行先返回(因为这些行很可能是你真正想要的行)

在这里插入图片描述

使用扩展查询

查询扩展用来设法放宽所返回的全文本搜索结果的范围。考虑下面的情况。

用法如下
在这里插入图片描述

布尔文本搜索

MySQL支持全文本搜索的另外一种形式,称为布尔方式( boolean mode)。
在这里插入图片描述
它的用法如下
在这里插入图片描述
又或者如下
在这里插入图片描述

这一次仍然匹配词heavy,但-rope明确地指示MySQL排除包含rope(任何以rope开始的词,包括ropes)的行,下面的例子多了一些布尔操作符,它的意思如下所示。

在这里插入图片描述

全文本搜索的使用说明

在结束本章之前,给出关于全文本搜索的某些重要的说明。
 在索引全文本数据时,短词被忽略且从索引中排除。短词定义为那些具有3个或3个以下字符的词(如果需要,这个数目可以更改)。
 MySQL带有一个内建的非用词( stopword)列表,这些词在索引全文本数据时总是被忽略。如果需要,可以覆盖这个列表(请参阅MySQL文档以了解如何完成此工作)。
 许多词出现的频率很高,搜索它们没有用处(返回太多的结果)。因此, MySQL规定了一条50%规则,如果一个词出现在50%以上的行中,则将它作为一个非用词忽略。 50%规则不用于IN BOOLEAN MODE。如果表中的行数少于3行,则全文本搜索不返回结果(因为每个词或者不出现,或者至少出现在50%的行中)。
 忽略词中的单引号。例如, don’t索引为dont。
 不具有词分隔符(包括日语和汉语)的语言不能恰当地返回全文本搜索结果。
 如前所述,仅在MyISAM数据库引擎中支持全文本搜索。

全文本搜索的内容比较多,也比较杂,我也没有详细去了解~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值