正向索引和反向索引

先介绍一下正向索引: 当用户发起查询时(假设查询为一个关键词),搜索引擎会扫描索引库中的所有文档,找出所有包含关键词的文档,这样依次从文档中去查找是否含有关键词的方法叫做正向索引。互联网上存在的网页(或称文档)不计其数,这样遍历的索引结构效率低下,无法满足用户需求。

正向索引结构如下:
文档1的ID→单词1的信息;单词2的信息;单词3的信息…
文档2的ID→单词3的信息;单词2的信息;单词4的信息…

为了增加效率,搜索引擎会把正向索引变为反向索引(倒排索引)即把“文档→单词”的形式变为“单词→文档”的形式。倒排索引具体机构如下:
单词1→文档1的ID;文档2的ID;文档3的ID…
单词2→文档1的ID;文档4的ID;文档7的ID…

单词-文档矩阵

单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型。
现有以下几个文档:

  • D1:乔布斯去了中国。
  • D2:苹果今年仍能占据大多数触摸屏产能。
  • D3:苹果公司首席执行官史蒂夫·乔布斯宣布,iPad2将于3月11日在美国上市。
  • D4:乔布斯推动了世界,iPhone、iPad、iPad2,一款一款接连不断。
  • D5:乔布斯吃了一个苹果。

此时用户查询为“苹果 And (乔布斯 Or iPad2)”,表示包含单词“苹果”,同时还包含“乔布斯”或“iPad2”的其中一个。

则“单词-文档”矩阵为:

该矩阵可以从两个方向进行解读:

  • 纵向: 表示每个单独的文档包含了哪些单词,比如D1包含了“乔布斯这个词”,D4包含了“乔布斯”和“iPad2”。
  • 横向: 表示哪些文档包含了该单词,比如D2、D3、D5包含了“苹果”这个词。

搜索引擎的索引其实就是实现“单词-文档”矩阵的具体数据结构。可以有不同的方式来实现上述概念模型,比如“倒排索引”、“签名文件”、“后缀树”等方式,但是“倒排索引”是实现单词到文档映射关系的最佳实现方式。

倒排索引

倒排索引(Inverted Index):倒排索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。

  • 单词词典(Lexicon):搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。
  • 倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。
  • 倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件即被称之为倒排文件,倒排文件是存储倒排索引的物理文件。

倒排索引的简单实现

还是用上面提到的例子:

  • Doc1:乔布斯去了中国。
  • Doc2:苹果今年仍能占据大多数触摸屏产能。
  • Doc3:苹果公司首席执行官史蒂夫·乔布斯宣布,iPad2将于3月11日在美国上市。
  • Doc4:乔布斯推动了世界,iPhone、iPad、iPad2,一款一款接连不断。
  • Doc5:乔布斯吃了一个苹果。

这五个文档中的数字代表文档的ID,比如"Doc1"中的“1”。
通过这5个文档建立简单的倒排索引:

首先要用分词系统将文档自动切分成单词序列,这样就让文档转换为由单词序列构成的数据流,并对每个不同的单词赋予唯一的单词编号(WordID),并且每个单词都有对应的含有该单词的文档列表即倒排列表。如上表所示,第一列为单词ID,第二列为单词ID对应的单词,第三列为单词对应的倒排列表。如第一个单词ID“1”对应的单词为“乔布斯”,单词“乔布斯”的倒排列表为{1,3,4,5},即文档1、文档3、文档4、文档5都包含有单词“乔布斯”。

这上面的列表是最简单的倒排索引,下面介绍一种更加复杂,包含信息更多的倒排索引。

TF(term frequency): 单词在文档中出现的次数。
Pos: 单词在文档中出现的位置。

这个表格展示了更加复杂的倒排索引,前两列不变,第三列倒排索引包含的信息为(文档ID,单词频次,<单词位置>),比如单词“乔布斯”对应的倒排索引里的第一项(1;1;<1>)意思是,文档1包含了“乔布斯”,并且在这个文档中只出现了1次,位置在第一个。
————————————————
版权声明:本文为CSDN博主「土豆同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43403025/article/details/114779166

倒排索引(反向索引)相关推荐

  1. 搜索引擎——反向索引原理揭秘及手写ik分词器

    原创不易,转载请标明地址,或者直接附上我的博客首页https://georgedage.blog.csdn.net/ 上篇博客我们说到,数据库为什么不适合搜索引擎的底层存储?,那么什么适合呢? ela ...

  2. python正向索引 反向索引_理解正向索引

    倒排索引也叫做反向索引(inverted单词也有反转的意思,只不过大家喜欢翻译成倒排索引). 倒排索引在搜索引擎中经常用到,倒排索引也叫做反向索引.某天在想,为什么叫做倒排索引呢?倒过来的,反转过来的 ...

  3. lucene反向索引——倒排表无论是文档号及词频,还是位置信息,都是以跳跃表的结构存在的...

    转自:http://www.cnblogs.com/forfuture1978/archive/2010/02/02/1661436.html 4.2. 反向信息 反向信息是索引文件的核心,也即反向索 ...

  4. 反向索引(Inverted Index)

    转自:http://zhangyu8374.iteye.com/blog/86307 反向索引是一种索引结构,它存储了单词与单词自身在一个或多个文档中所在位置之间的映射.反向索引通常利用关联数组实现. ...

  5. Oracle模糊查询之(2.如何测试模糊查询的时间及使用是否使用索引)反向索引与模糊查询

    反向索引与模糊查询 反向索引应用于前模糊的用法简介: 1.反向索引 SQL> create index ind_name on atest reverse(name); SQL>  sel ...

  6. inverted index 反向索引 python

    一.简单版 from collections import defaultdict class inverted_index:def __init__(self, docs):self.doc = d ...

  7. 反向索引和自增索引区别_深度解析 百度收录与百度索引有什么区别?

    在过去的一段时间里,大家一度对收录和索引的概念非常模糊,百度工程师也曾"粗暴"地说过"收录和索引是一回事".但实际工作中,发现,其实收录和索引都有其各自的重要意 ...

  8. 反向索引和自增索引区别_一张图看懂SEO收录与索引的区别

    在过去的一段时间里,大家一度对收录和索引的概念非常模糊,百度工程师也曾"粗暴"地说过"收录和索引是一回事".但实际工作中,院长发现,其实收录和索引都有其各自的重 ...

  9. 【索引】反向索引--条件 范围查询(二)

    当 where 条件中 含有 <> 条件或者 not in 时 走INDEX FAST FULL SCAN 执行计划中的 限制条件 not in 转换为 <> PHP code ...

最新文章

  1. java调用ffmpeg,mencoder进行视频转换,读取时长等
  2. 虚拟私有云网络VPC
  3. 大话设计模式C++版——装饰模式
  4. pilt图像处理_图像处理 PIL
  5. c++primer书上习题date类的部分源代码(待整理)
  6. python中pip的安装与使用
  7. OpenResty中使用反向代理
  8. Libfetion在Ubuntu下的中文输出了局
  9. Mac电脑彻底卸载office(Excel,Word)
  10. 数据链路层(以太网、MTU、ARP协议)
  11. 如何进行 360 评估
  12. WiFi过敏?没准是心病
  13. 联想xiaoxin700-15isk黑苹果clover分享
  14. 【Matlab】 气候资料数据集预处理
  15. java 抽奖_简单实现java抽奖系统
  16. 成功人士成功秘诀的调查报告,拥有梦想至关重要
  17. 5款类蝉妈妈抖音数据工具推荐
  18. android 耗时分析,启动耗时分析(四)-具体方法耗时分析
  19. “登录”呢?还是“登陆”呢??
  20. 各大银行网上转账手续一览表

热门文章

  1. jar包打不开怎么处理?
  2. 基于滑模速度控制器的PMSM矢量控制
  3. 关于两个路由器互连的问题
  4. php vue模板,探索PHP与Vue通用直出模板方案
  5. 外呼系统《智能录音外呼IVR和智能外呼机器人》
  6. JAVA毕设项目网上拍卖系统(java+VUE+Mybatis+Maven+Mysql)
  7. python 抓取网页 库_5种流行的Web抓取Python库,你用过哪种?
  8. vue+eChart实现省份地图
  9. 关于tensorly中的unfold
  10. 使用 GetStartupInfo 检查自己是否被调试(转自看雪论坛)