前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL全文索引的概念

MySQL全文索引的概念

作者头像
AsiaYe
发布2019-11-06 17:43:44
1.1K0
发布2019-11-06 17:43:44
举报
文章被收录于专栏:DBA随笔DBA随笔

MySQL全文索引的概念

今天下午下班去吃饭,吃完饭坐电梯上三楼,竟然被困在电梯里面了,当时的感觉还是很刺激的,电梯上升着,突然就掉下来了,像跳楼机一样,突出一个刺激,索性只掉了一层。。。然后由于是下班时间,修电梯的师傅打车来公司,修了半个小时才修好的,我们3个DBA在电梯里面困了一个半小时。困在电梯里的时候,大家在开玩笑说,这个时候要是出个线上的故障,那不得了啊,公司的中流砥柱们都困在电梯里了,哈哈哈。

今天回家比较晚了,简单写写全文索引的概念吧。在日常的业务场景中,我们可能通过字段的数值比较和范围过滤等方法就能完成绝大多数数的查询工作了,但是考虑这样一种场景,你需要做一些关键字的匹配查询,需要基于相似度进行查询,例如你输入"我 帅哥"这两个关键字,其实需要匹配的是包含我和帅哥这两个关键字的内容,顺序可能不一致,例如返回的结果可能是:"我是帅哥","我不是帅哥"。事实上全文索引就是为这种情况设置的。

这样的场景是不是感觉很熟悉,是的,百度的搜索引擎就是这样的,你输入关键字,会根据关键字来匹配相关的文章来供读者查看。这样在庞大的数据量中进行匹配搜索的过程一般不会在关系型数据库中使用,但是在全文索引的基本原理都是一样的。全文索引有自己独特的语法,这些语法帮助这类查询找到某些关键字的记录,全文索引可以支持各种内容的搜索,包含char、varchar以及text的类型,不幸的是,MySQL对于全文索引的支持不是特别好,我们知道MyISAM存储引擎支持全文索引,但是还是存在一些问题,因为表级别的锁会对性能产生影响、数据文件崩溃的恢复等等问题确实存在。

这里我们主要从自然语言的全文索引和布尔全文索引两个方面来简单介绍。所谓的自然语言全文索引,它需要计算每一个文档对象和所要查询的关键字的相关度,以及关键字在文档中出现的次数。在整个全文索引中出现次数最少的词语,匹配的相关度就越高。what?这和我们想象的是不一样的,可能在我们的概念里,这个单词在某个文档中出现的次数比较多,那么这个文档就是我们想要的,事实不是这样的,例如非常常见的单词可能在50%以上的文章中都出现了,那么这个单词肯定不是我们想要搜索的结果,因为太大众化了。这里介绍一下全文索引的语法:

select * from tbl where match (field) against ('a');

其中,field是相关的搜索字段,against中的a是要搜索的字符串。

以上是自然语言的全文索引部分,来看布尔全文索引,其实布尔全文索引也比较好理解,就是在全文索引的基础上添加了一些布尔的运算符号,看下面的介绍:

~smart 不包含smart单词的内容优先级高

+smart 文档中必须包含smart

-smart 文档中不能包含smart

smart* 以smart开头的内容优先级高

举个例子吧:

搜索NBA 库里和NBA -库里的结果是完全不相同的,有了-这个符号,则没有出现库里名字的结果会出现的比较靠前。试过chrome,这个结果更加明显。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档