倒排索引压缩及在RDBMS全文检索中的实现

资源类型:pdf 资源大小:456.00KB 文档分类:工业技术 上传者:张辉

相关文档

批量下载下列文档

文档信息

【作者】 朱虹  吴林 

【关键词】全文检索 倒排索引 索引压缩 编码 

【出版日期】2005-04-30

【摘要】提出了一种对倒排索引进行压缩的方法,在保证较高压缩率的前提下,对压缩后的数据提供了随机访问的能力.这种方法将压缩后的数据分为两部分,第一部分用来表示单词在子区间的出现次数,第二部分用来表示单词在子区间的具体出现位置,详细描述了检索过程,通过第一部分的信息可以直接对第二部分的任意位置进行解压缩,体现了其随机访问能力,并分析了压缩比和检索效率,讨论了该压缩方法在RDBMS全文检索中的实现,以及如何用表格形式对其进行存储,针对多关键字的检索对算法进行了优化.该实现方法一方面充分利用了数据系统的优点,获得了良好的动态性能,另一方面节省了倒排索引对空间的需求,并提高了检索效率.

【刊名】华中科技大学学报(自然科学版)

全文阅读

目前主流的关系型数据库管理系统 (Rela tionalDatbaseManagementSystem以下简称RDBMS)都提供了全文检索的功能 ,检索的效率就成了人们关注的目标 .其主要包括两个方面 :一是对索引进行压缩以减少所需的空间 ;二是采用优化方案以提高检索的速度 .这两个方面在一定程度上是相互矛盾的 .对索引压缩比较常用的方法有Golomb编码和Elias′sγ编码[1 ,2 ] ,压缩虽然减少了索引占用的空间 ,但是同时也增加了查询时对索引解压的时间消耗 .Moffat和Zobel[3] 对这个问题进行了探讨 ,并且提出了在索引文件中增加冗余信息的方法 ,使得压缩后的索引具有随机访问的能力 ,可以只对索引中需要的部分进行解压 ,节省大量的查询时间 .本文以广泛使用的倒排索引为研究对象 ,采用了一种可随机访问的压缩方式对索引数据进行压缩 ,在保证较高压缩率的前提下提供了优良的检索性能 .1 倒排索引的压缩在倒排索引的一般格式中[1 ] ,设文本编号为T ,关键字wi 在文本中的出现位置为D1 ,D2 ,… ,Dm,总共出现m次 ,则关键字wi 的索引数据为〈T ,m ,[D1 ,D2 ,… ,Dm]〉 ,其中关键字在文本中的出现位置占用了绝大部分的空间 ,对其进行压缩可以大大减少索引占用的空间 .1 .1 编码方法定义 1 设文本的长度为N ,取一个非负整数k作为参数 ,以 2 k 为长度将文本划分为若干区间 ,则划分出的每个区间称为子区间 .子区间的个数s=「N/2 k (向上取整 ) ,其中k称为编码参数 .定义 2 设关键字为w ,它在子区间i( 0≤i<s)中出现的次数为xi(xi≥ 0 ) ,对xi 进行一元编码[4] 的结果为ui,则二进制序列u1 u2 …us称为w的前缀编码 .定义 3 设关键字w在文本中的出现位置为d1 ,d2 ,… ,dm,计算di 与子区间起始位置的差值bi=(di- 1 )mod 2 k,对其进行二进制编码[4] ,则二进制序列b1 b2 …bm 称为w的主体编码 .将前缀编码和主体编码合并起来 ,就得到最终的编码结果u1 u2 …usb1 b2 …bm.1 .2 解码方法解码的目的是从编码序列中得到关键字w的具体出现位置 .如上所述 ,对关键字w在文本N中出现的位置进行编码后的结果为u1 u2 …usb1 b2 …bm,设其编码参数为k ,如果要获取w在子区间i的具体出现位置 ,那么解码的过程分为如下两步 .a .对前缀编码部分进行搜索 ,找出w在子区间i中出现的次数Fi,以及w在子区间i之前出现的总次数Bi.设u为前缀编码部分的二进制序列 ,根据一元编码的性质 ,其中的每一个二进制位 1都表示w的一个出现位置 ,设函数Z(u ,v)用来获得第v个 0在u中出现的位置 ,函数O(u ,v)用来获得u中第v个位置之前 1的个数 ,那么可以得到 :Fi =Z(u ,i) -Z(u ,i- 1 ) ;Bi =O(u ,Z(u ,i- 1 ) ) .  b .得到Fi 和Bi 之后 ,就可以对主体编码部分进行随机访问 ,因为这个部分每个数值的编码都是固定的长度k .设b为主体编码部分的二进制串 ,函数C(b,v ,k)用来获得b中从v开始的k个二进制位所表示的整数 ,那么w在子区间i的第j( 1≤j≤Fi)个出现位置P(i,j)为P(i,j) =2 k(i - 1 ) +C(b ,(Bi+ j- 1 )k ,k) .  从上述分析可知 ,由于将编码分为了两部分 ,在对前缀编码进行搜索取得所需结果之后 ,可以直接对主体编码部分进行定位解码 ,避免了对整个编码部分的查询和解码处理 ,节省了查询时间 .1 .3 压缩比分析现在对编码机制进行分析 ,讨论如何在实际应用中确定其参数k的值 ,并且对其压缩比进行分析 .a .k的取值 .对于长度为N的文本 ,关键字w在其中出现了m次 ,那么经过编码压缩后索引的长度为L(N ,m) =m +「N/2 k +mk . ( 1 )式 ( 1 )的前两项计算的是一元编码部分中的 1和0的个数 ,根据一元编码的性质 ,1的个数就是w出现的次数m ,而 0的个数就是子区间的个数「N/2 k ;后面一项计算的是二进制编码的位数 .此公式对m求导 ,当公式取极小值时k的数值为k =「log2 (Nln2 /m) 或者k = log2 (Nln2 /m)」 .  可以看出 ,在文本的长度N和关键字w出现的位置m已知的情况下 ,可以计算出k的值 .b .压缩比 .将k的值代入式 ( 1 ) ,可以得到压缩后索引的长度 L(N ,m) ≈m( 1 /ln2 + 1 +log2 (Nln2 /m) ≈m( 1 .91 4+log2 (N/m) ) .  以中文文本为例 ,中文的常用汉字大概有5 0 0 0个 ,假设每个汉字出现的概率是相等的 ,即在长度为 5 0 0 0的文本中出现 1次 ,那么单个汉字的索引的平均长度为L( 5 0 0 0 ,1 ) =1 .91 4+log2 ( 5 0 0 0 ) =1 4.2 0 3.如果不采用压缩方法 ,存放汉字的一个出现位置需要使用一个占 4byte空间的整数 ,也就是32bit,那么压缩率为 1 4.2 0 3/32 =0 .444.根据申农的信息熵理论[1 ,5] ,当达到压缩效果的理论极限时 ,编码需要的最少长度Lmin =-log2 ( 1 /5 0 0 0 ) =1 2 .2 89.  此时压缩率为 1 2 .2 89/32 =0 .384,可以看出 ,虽然损失了一部分压缩性能 ,但是相对于它所具有的随机访问能力来说 ,这些效率上的损失是可以接受的 .2 倒排索引的压缩在RDBMS中的实现2 .1 倒排索引存储结构在对RDBMS中的表建立倒排索引时 ,表中每一条元组的数据对应于一个文本 ,如果用R表示一个元组的标号 ,那么关键字w的索引数据的格式可以表示为(w ,R ,M ,(P1 ,P2 ,… ,Pn) ) ,式中 :M表示w在本元组中出现的位置总数 ;P1 ,P2 ,… ,Pn 表示w出现的具体位置 .为了节省倒排索引的空间占用率 ,采用上述的编码方法对其进行压缩 ,设编码参数为k ,编码后的结果为u1 u2 …usb1 b2 …bm,那么经过编码压缩后需要保存的信息有以下几项 :w ,R ,k ,u1 u2…usb1 b2 …bm.在RDBMS中可以利用系统的原有功能 ,将倒排索引的数据组织成表的形式存储 ,上述的每条信息对应表的一个字段 .为了能够利用上述编码方法的特性来优化检索性能 ,这里将编码结果u1 u2 …usb1 b2 …bm 分为两部分保存 ,前缀编码部分u1 u2 …us 和主体编码部分b1 b2 …bm 分别保存在不同的字段中 .因此设计的表格如表 1所示 .其中 ,主关键字为 (w ,R) ,编码部分U- DATA和B- DATA采用Varchar类型存放编码结果的二进制序列 ,在解码时需要对其进行位操作 ,取得关键字w的出现位置信息 .表 1 倒排索引的表结构列名列类型含义列约束wVarchar关键字PrimarykeyRInteger 元组号PrimarykeykByte 压缩编码参数无U-DATA Varchar前缀编码部分无B-DATA Varchar主体编码部分无  表 1是一个一般性的结构 ,在不同的实际使用中 ,可以根据数据库系统的具体情况进行修改 ,以获得最佳的性能 .2 .2 检索过程优化实际应用中 ,检索条件是一个短语 ,分词后得到多个关键字w1 w2 …wm,只有当文本中这些关键字同时出现并且位置相邻时 ,才是实际需要的检索结果 .因此检索时可以利用前一个关键字的检索结果来对后继关键字的索引体进行定位解码 ,达到节省检索时间的目的 .步骤如下 :a .对w1 进行检索 ,即对w1 的前缀编码部分U- DATA和主体编码部分B- DATA应用 1 .2解码方法进行解码 ,其结果为w1 在文本中出现的位置 (d1 ,d2 ,… ,dm) ;b .设w1 的长度为n ,在检索条件中 ,w2 与w1 的出现位置间隔为n ,因此只有当w2 在(d1 +n ,d2 +n ,… ,dm+n)中出现时 ,才符合条件 ,下面就判断w2 是否在这些位置出现过 ;c.取出w2 的前缀编码部分u2 ,先算出d1 +n所在子区间i= d1 +n/2 k」 ,然后计算w2 在子区间i中的出现次数Fi=Z(u2 ,i) -Z(u2 ,i- 1 ) ,若Fi=0 ,则表示w2 没有出现 ,可以略过对主体编码部分的解码操作 ;d .依次对d2 +n ,d3+n ,… ,dm+n重复执行步骤c ,最终得到w2 的检索结果 ;e.重复以上步骤 ,得到所有检索结果 .综上所述 ,采用这种方法在关系型数据库系统中实现倒排索引时 ,一方面能充分利用原系统的优点 ,使其获得了良好的动态性能 ;另一方面所采用的压缩方式不但能节省索引对空间的需求 ,还可以大大提高检索时的效率 ,特别是在检索条件比较多时效果尤为明显 .该方法唯一的缺点是仍需要较大的空间 ,不过相对于动态性和效率上的提高来讲 ,是可以接受的 .倒排索引压缩及在RDBMS全文检索中的实现@朱虹$华中科技大学计算机科学与技术学院!湖北武汉430074 @吴林$华中科技大学计算机科学与技术学院!湖北武汉430074全文检索;;倒排索引;;索引压缩;;编码提出了一种对倒排索引进行压缩的方法,在保证较高压缩率的前提下,对压缩后的数据提供了随机访问的能力.这种方法将压缩后的数据分为两部分,第一部分用来表示单词在子区间的出现次数,第二部分用来表示单词在子区间的具体出现位置,详细描述了检索过程,通过第一部分的信息可以直接对第二部分的任意位置进行解压缩,体现了其随机访问能力,并分析了压缩比和检索效率,讨论了该压缩方法在RDBMS全文检索中的实现,以及如何用表格形式对其进行存储,针对多关键字的检索对算法进行了优化.该实现方法一方面充分利用了数据系统的优点,获得了良好的动态性能,另一方面节省了倒排索引对空间的需求,并提高了检索效率.[1]WittenIH ,MoffatA ,BellTC .Managinggigabytes:compressingandindexingdocumentsandimages[M ].NewYork:VanNostrandReinhold,1994. [2]NavarroG ,MouraE ,NeubertM .Addingcompressiontoblockaddressinginvertedindexes[J].InformationRetrieval,2000,3(1):49—77 [3]MoffatA ,ZobelJ .Self indexinginvertedfilesforfasttextretrieval[J].ACMTransactionsonInformationSystems,1996(10):349—379 [4]ScholerF ,WiliamsH ,YiannisJ .Compressionofin vertedindexesforfastqueryevaluation[J].ACMTransactionsonInformationSystems,2002(8):222—229 [5]WilliamsH ,ZobelJ .Compressingintegersforfastfileaccess[J].ComputerJournal,1999,42(3):193—201湖北省科技攻关项目(2002AA103A06).

1

引证文献

问答

我要提问