关闭

关于全文索引的动态维护

844人阅读 评论(3) 收藏 举报
  
关于全文索引的动态维护
 
我看了好多关于全文索引的动态维护的文章。对整体有个总结,如下:
 
现在最通用的全文检索的方法都是倒排序索引结构。当数据量很大的时候,这种倒排序索引结构在查询时能有很好的性能。
   
全文索引的动态维护主要是指在已经建好的索引的基础上,不断地进行insert/update/delete操作,并且需要快速的对新加入的数据进行query,所以这就对索引的维护提出了更高的性能要求。
      
全文索引的动态维护分为 on-line 和off-line两种维护的方法。On-line的技术相对复杂,大部分的论文著作主要是将这一方面的。特别是在互联网快速发展的今天,对全文索引进行更快,更有效的维护,可以让用户的查询更加的方便,快捷。
 
全文索引的动态维护的研究主要是对新增的数据建立索引,然后和已有索引如何处理这样的一个关系的研究。一般来说,维护的代价小,则查询的性能就会差一些。如果想查询的性能非常好,那可能维护得代价就会大。全文索引动态维护的研究就是研究在建立索引和查询索引的性能中间寻找一个比较好的平衡点。
 
关于insert的解决方法主要有下面几种:
   
1.删除已有的索引,进行完全重建。这种方法需要对已有的数据重新建立索引,时间花销相对比较大,但是也不是没有优点。当数据量相对小的时候进行这种方法,反而是个很好的选择办法。
       
详细的可以参考:Nicholas Lester,Justin Zobel,Alistair Moffat的论文 《Fast On­Line Index Construction by Geometric Partitioning》
               
2.立刻归并。对新增的索引和硬盘上的索引一起进行归并。在这种情况下就算新增的数据很小也会在归并上花费大量的时间。
        
3.In­place update。主要是讲在每个term 的posting-list中预保存一段空间,将新增的posting-list加到这预保存的空间中,如果空间不够,就需要重新的进行分配,进行拷贝。当然这中间也有一些算法可以优化。
                  
详细的情况大家可以参考:Nicholas Lester,Justin Zobel,Alistair Moffat的论文 《Fast On­Line Index Construction by Geometric Partitioning》
         
4.进行归并,但不是立刻归并,而是设定一定的标准,到达一定条件进行归并。这种方法用的比较多。研究的重点就是何时进行归并?采用什么样的归并算法可以让性能更好一些
 
关于delete的索引操作优化

关于delete的操作,大都采用这样的一个策略:将文章的标号设置为deleted,查询的时候略过这些删除的文章,但是,久而久之,索引中存在大量地无用信息,空间上利用率不高,在归并和查询时会影响性能。有这样一个公式 :

 ρ=delete的索引信息/所有的索引信息

ρ=0,最好的查询性能。
ρ=1,索引维护的性能最高。
 
我看到的关于这部分的优化有两个思想:
 
1.不太现实的理论想法(On-the-Fly Garbage Collection):
根据ρ的变化来动态的决定作怎样的处理。
            
详细的内容请参考:《Indexing Time vs. Query Time Tradeoffs in Dynamic Information Retrieval Systems》
Stefan B¨ uttcher and Charles L. A. Clarke
University of Waterloo, Canada
           
2.就是定期的或者提供给用户一定的接口,让用户来做这个操作。比如SQL SERVER就提供了一定的SQL语句,让用户根据自己的当前操作来决定是否需要回收索引中的碎片。这种方式目前用的比较多。
 
    
 
我今天上午就看会了这些,赶紧记录下来,可能有些地方不对,欢迎大家讨论。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:111592次
    • 积分:1738
    • 等级:
    • 排名:千里之外
    • 原创:51篇
    • 转载:38篇
    • 译文:0篇
    • 评论:110条
    文章分类
    最新评论