倒排索引(Inverted File Index )



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

(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。以此可以得到包含某关键字的网页的文件集合,然后根据文件链表得到此关键字在网页中的出现位置信息。

倒排索引(Inverted File Index )_第1张图片 

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

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

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

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

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

你可能感兴趣的:(搜索引擎,海量数据,倒排索引,位图)