数据结构~倒排索引算法(InnoDB全文索引的实现原理)

前言

在各大搜索引擎中,输入关键字都可以找到我们想要的文章,还有InnoDB引擎中的全文索引,为什么能提高大量数据的检索,他们都有个共同的原因就是底层都是倒排索引算法。

我们先了解一些基本概念。

基本概念

文档

  • 一般搜索引擎的处理对象是互联网网页,而文档这个概念更要宽泛一些,代表以文本形式存在的存储对象。相比于网页来说,涵盖更多形式,比如Word、PDF、html、XML等不同格式的文件都可以称为文档,再比如一封邮件、一条短信、一条微博也可以称为文档。

文档集合

  • 由若干文档构成的集合称为文档集合。比如海量的互联网网页或者大量的电子邮件,都是文档集合的具体例子。

文档编号

  • 在搜索引擎内部,会为文档集合內每个文档赋予一个唯一的内部编号,以此编号作为这个文档的唯一标识,这样方便内部处理。

单词编号

  • 与文档编号类似,搜索引擎内部以唯一的编号来表征某个单词,单词编号可以作为某个单词的唯一表征。

了解完这些我们就可以开始了解倒排索引算法了。

倒排索引

  • 倒排索引是实现单词 ->文档矩阵的一种具体存储形式。
  • 通过倒排索引,可以根据单词快速获取包含这个单词的文档列表
  • 倒排索引主要由两个部分组成:单词词典和倒排文件。
    在这里插入图片描述

单词词典

  • 搜索引擎通常的索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的单词集合,单词词典内每条索引项会记载单词本身的一些信息及指向所含这个单词的文档的指针。

  • 所以在用户进行查询的时候,搜索引擎根据用户的查询词,去单词词典里查询,就能够获得相应的倒排列表,并以此作为后续排序的基础。

  • 对于一个规模很大的文档集合来说,可能包含几十万甚至上百万不同的单词,能否快速定位某个单词,这直接影响搜索时的相应速度,常用的数据结构包括哈希加链表结构和树形词典结构。

哈希加链表结构一般选用像如java8中的hashmap结构就可以胜任,但是这种方式对于实现相似文章需求不好实现,选用树形结构就可以或者方便实现相似文章,比如使用B树

倒排文件

  • 所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件即被称为倒排文件,倒排文件是存储倒排索引的物理文件。

建立倒排索引的步骤:

  1. 用分词系统将文档自动切分成单词序列。
  2. 对每个不同的单词赋予唯一的单词编号,并记录下哪些文档包含这个单词。
  3. 实用的倒排索引还可以额外记录两类信息:每个单词对应的文档频率信息(DF,文档集合中有多少个文档包含了这个单词),及单词在某个文档中出现的位置信息(POS)。

倒排列表

  • 倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。

  • 其还可以额外记录单词频率(TF),代表这个单词在某个文档中出现的次数,根据这个次数就可以返回匹配度最好的一篇文章。因为词频信息在搜索结果排序时,是计算查询和文档相似度的一个很重要的计算因子。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值