目前主流的索引技术有三种:倒排文件、后缀数组和签名。后缀数组的方法虽然快,但是其维护困难,代价相当高,不适合做引擎的索引。签名是一种很好的索引方式,但倒排文件的速度和性能已经超过了签名。倒排文件是一种在各大搜索引擎中被主要使用的索引的方式,并且它也是搜索引擎中一个核心的技术。

(1)顺排文件的建立

假设有网页P1,P2,……,Pn,给每个网页文件赋予一个编号Pid,给每个关键字赋予一个编号keyi,假设key是网页文件中的一个关键字,ni表示该关键字在网页文件中出现的次数,<hit1,hit2,…,hitn>表示该关键字在网页文件中的位置信息。首先将网页内容切分成一系列关键字:Pi={Key1,key2,…,keyn}。建立以下顺排文件:

P1={[n1,Key1(hit1,hit2,…,hitn)],…,[nx,keyi(hit1,hit2,…,hitx)] }

P2={[n1,Key1(hit1,hit2,…,hitn)],…,[nn,keyk(hit1,hit2,…,hitn)] }

…………

Pn={[n1,Key1(hit1,hit2,…,hitn)],…,[ny,keyj(hit1,hit2,…,hity)] }

例如,对以下两段文字进行顺排文件操作。

“随着经济的发展,人们对生活的品质要求越来越高。特别是在视觉欣赏方面,更是追求精益求精。如何把模糊的图像变得清晰,把暗淡的色彩变得色彩鲜艳是一个非常值得研究的课题。并且在数字电视、扫描仪、医疗图像、计算机视觉、卫星监测、航空摄像等方面对图像的清晰度有着广泛的需求。目前基于网格和密度的聚类方法已经渗透到各个领域,且得到了令人意想不到的效果。本文是将基于网格和密度的聚类方法运用到模糊图像中,从而对图像进行增色处理。”

“数字图像处理又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。数字图像处理最早出现于20世纪50年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息。数字图像处理作为一门学科大约形成于20世纪60年代初期。早期的图像处理的目的是改善图像的质量,它以人为对象,以改善人的视觉效果为目的。”

假设第一段文字是一个网页P1的全部内容,段首的起始位置为1。第二段文字是第二个网页P2的全部内容,段首的起始位置为1。

对网页进行自动分词,得到关键字以及关键字在网页文件中出现的位置信息。顺排文件的结果为:

P1={[1,经济(3)],[1,发展(6)],……,[2,视觉(26,93)],……,[5,图像(46,88,107,177,182)],……,[1,处理(189)]}

P2={[4,数字(1,29,48,101)],[8,图像(3,13,21,49,96,103,130,140)],……,[1,视觉(156)],……,[2,目的(135,161)]}

(2)实现倒排文件的原理

顺排文件是以网页来索引关键字的,即形式为(网页→关键字),不符合搜索引擎的需要。因此,需进行倒排处理,以关键字来索引网页,即形式为(关键字→网页):
Keyi→{[Pid1,ni1(hit1,hit2,…,hitni1)],…,[Pidn,nin(hit1,hit2,…,hitnin)]}

对以上顺排文件中建立的两个实例网页P1和P2的顺排文件进行倒排,倒排文件的结果为:

经济→{[P1,1(3)]}

发展→{[P1,1(6)],[P2,1(74)]}

……

视觉→{[P1,2(26,93)],[P2,1(156)]}

……

图像→{[P1,5(46,88,107,177,182)],[P2,8(3,13,21,49,96,103,130,140)]}

……

综上所述,倒排文件的实现过程是:先得到顺排文件,然后根据顺排文件得到倒排文件,从而实现由关键字来索引网页。

(3)倒排文件的优化之一—位图文件

在实际中,一般索引项并不存储实际的关键字,而存储它的一个编号值(kid),这样可以有效节约存储空间。对于文件链表(Posting),只存储网页文件编号(Pid)和网页文件编号加上该关键字在文件中出现的位置信息。

其中Pid1,…,Pidn表示包含关键字ki的所有网页文件集合,考虑到文件链表进行布尔运算时,速度不是很快,以及使用文件链表要消耗大量内存等问题,一般采用位图(Bitmap)文件来实现倒排索引。Bitmap的优点是布尔运算非常快,直接用对应的bit位作运算就可以了。想要得到同时包含某几个关键字的网页,那么直接把它们对应的网页文件位图向量进行与运算,就可以知道在哪些文件中同时包含了这几个关键字。在文件数目不是很多的情况下,只存储命中信息,实现了命中信息和非命中信息(比如关键字在文件中的位置,关键字在文件中出现的频率等)的分离,可以大大提高索引的效率。

把由网页文件向量Pi=<key1,key2,…,keyn>构成的“网页→关键字”,转化成“关键字→网页”。转换方法是根据网页文件向量构成“网页-关键字”阵列,如图5-2所示,并用Bitmap作为存储结构,形成倒排矩阵A,如图5-3所示。

倒排矩阵中的Aij元素取值为0,表示网页Pj中没有关键字ki;倒排矩阵中的Aij元素取值为1,表示网页Pj中有关键字ki。以此可以得到包含某关键字的网页的文件集合,然后根据文件链表得到此关键字在网页中的出现位置信息。

 

Bitmap文件实现的倒排矩阵在海量数据环境下是比较稀疏的,必须对它进行压缩,并且保证在解压的过程中,速度也比较快,这样可以大大提高索引的性能,也节省了大量的存储空间。目前比较成熟的位图压缩算法主要有Delta encoding、Variable-length encoding、Gamma codes等。

虽然它们都是比较成熟的算法,但是要么实现起来比较复杂;要么压缩效率很高,但是解压的过程要消耗较长的时间,这对于搜索引擎的实时响应要求很高的系统是不适合的。

2.改善倒排文件性能的方法

倒排文件的时间代价主要取决于词汇表的组织方式,词汇表文件通常较小且比较固定,对于未登录词和数词可以按字建索引;倒排文件的空间代价主要取决于对事件表的压缩能力,事件表的压缩能减少I/O操作,也能提高部分时间性能。词汇表文件的组织方式通常采用Hash散列表,按字母表顺序有序排列,采用Trie树、B树等查找树。事件表的压缩通常采用Bitmap文件压缩或差值压缩(Delta Compression)词汇表的哈希存储,根据给定的关键字,散列成一个整数,用该整数作为词汇的访问地址。

倒排文件的优点是:实现简单,响应时间快,支持复杂查询,适合商用搜索引擎。缺点是:建立索引要消耗很大的磁盘、内存空间;当网页更新后,索引的维护代价也比较大。

倒排索引(Inverted File Index )相关推荐

  1. 倒排文件索引(Inverted File Index)的建立

    建立索引 目前主流的索引技术有三种:倒排文件.后缀数组和签名.后缀数组的方法虽然快,但是其维护困难,代价相当高,不适合做引擎的索引.签名是一种很好的索引方式,但倒排文件的速度和性能已经超过了签名.倒排 ...

  2. 倒排文件索引(Inverted File Index)

    倒排文件是一种在各大搜索引擎中被主要使用的索引的方式,并且它也是搜索引擎中一个核心的技术. 一个典型的倒排索引主要由词汇表(也叫索引项)和事件表(也叫文件链表)两部分组成.词汇表是用来存放分词词典的, ...

  3. 倒排索引 inverted index

    2019独角兽企业重金招聘Python工程师标准>>> 1.什么是倒排索引. e>>>(⊙o⊙)- 这是我见过最垃圾的翻译了,完全让人误解他的意思. 这个名称很容易 ...

  4. MapReduce功能实现十---倒排索引(Inverted Index)

    MapReduce功能实现系列:       MapReduce功能实现一-Hbase和Hdfs之间数据相互转换       MapReduce功能实现二-排序       MapReduce功能实现 ...

  5. Sonarqube plugin插件 在使用Sonar-scanner时不能 扫描 file index 动态新生成的文件 解决方案

    Sonarqube plugin插件 在使用Sonar-scanner时不能 扫描 file index 动态新生成的文件 解决方案 参考文章: (1)Sonarqube plugin插件 在使用So ...

  6. Maplab系列15:Inverted File

    关于Inverted File的主要说明在这篇文章中:Get Out of My Lab:Large-scale, Real-Time Visual-Inertial Localization 文章说 ...

  7. 正排索引(forward index)与倒排索引(inverted index)

    一.正排索引(前向索引) 正排索引也称为"前向索引".它是创建倒排索引的基础,具有以下字段. (1)LocalId字段(表中简称"Lid"):表示一个文档的局部 ...

  8. python 倒排索引(Inverted Index)

    倒排索引是一种检索方式,比如存入数据库的数据是存一篇文章进去,然而检索时我们经常需要通过关键词检索,所以提前做好倒排索引即可方便检索,而省略掉全表扫描的问题了,这是一种用空间换时间的方法. 使用字典构 ...

  9. mysql idataparameter_MySQL技术内幕——InnoDB存储引擎笔记

    第一章 MySQL体系结构和存储引擎 1.1 定义数据库和实例 数据库 :物理操作系统文件或其他形式类型文件的集合 实例 : MySQL数据库由后台线程以及一个共享内存区组成. Mysql数据库实例在 ...

最新文章

  1. 李宏毅机器学习笔记(二)-------Why we need learn Machine Learning?
  2. 章节七、4-Sets
  3. C++实用技巧(二)
  4. 理解php中的yield
  5. python中运算的英文_[lemon]Python中的运算符,LemonPython
  6. 当按下ESC键时,关闭应用程序
  7. 去除List集合中的重复值(四种好用的方法)
  8. C++复数的运算、运算符重载
  9. 阿里云 Windows Server 2012 r2 部署asp.net mvc网站 平坑之旅
  10. python中threading模块_举例详解Python中threading模块的几个常用方法
  11. Caffe学习:Solver
  12. 北师计算机应用基础开放作业,北师大计算机应用基础开放作业答案
  13. IDEA2019版下载和安装
  14. KYC (Know Your Customer) 综述篇
  15. 回归分析中自变量取舍、检验及多重共线性处理(VIF)
  16. Moebius for SQLServer负载均衡
  17. java 初始化数组_java如何实现数组初始化
  18. 【ActiveMQ】JMS中间件ActiveMQ详解
  19. java中代表人数的单词_计算列表中显示的单词数量
  20. java eventbus_Guava学习笔记:EventBus

热门文章

  1. 有关数据治理的本质及实践,看这一篇就够了【转】
  2. 基于注解的Spring AOP的配置和使用--转载
  3. Lesson 6. Scikit-Learn使用与进阶
  4. 【联邦学习】FATE 集群部署 step1
  5. 开启 Truffle Ganache  MetaMask交互
  6. tensorflow中的seq2seq例子为什么需要bucket? 有关tensorflow 的sequence2sequence例子,为什么需要用到buckets,rnn不是可以处理任意长度的数据吗
  7. 亚马逊外包平台的50万劳工:人工智能的背后,无尽数据集的建造
  8. 深度机器学习中的batch的大小对学习效果有何影响?
  9. 逻辑回归模型(Logistic Regression, LR)基础 - 文赛平
  10. 蚂蚁金服张洁:基于深度学习的支付宝人脸识别技术解秘-1