关于全文索引的动态维护

原创 2007年09月25日 12:41:00
  
关于全文索引的动态维护
 
我看了好多关于全文索引的动态维护的文章。对整体有个总结,如下:
 
现在最通用的全文检索的方法都是倒排序索引结构。当数据量很大的时候,这种倒排序索引结构在查询时能有很好的性能。
   
全文索引的动态维护主要是指在已经建好的索引的基础上,不断地进行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语句,让用户根据自己的当前操作来决定是否需要回收索引中的碎片。这种方式目前用的比较多。
 
    
 
我今天上午就看会了这些,赶紧记录下来,可能有些地方不对,欢迎大家讨论。

Oracle全文索引之四 维护

索引的维护对于CTXSYS.CONTEXT索引,当应用程序对基表进行DML操作后,对基表的索引维护是必须的。索引维护包括索引同步和索引优化。在索引建好后,我们可以在该用户下查到Oracle自动产生了以...

sql全文索引

  • 2014年04月23日 09:52
  • 749KB
  • 下载

fullTextIndex(全文索引示例)

  • 2007年08月07日 11:38
  • 136KB
  • 下载

mysql全文索引中文问题的解决

MySQL从3.23.23开始就逐渐支持全文索引和搜寻。  全文索引就是建index,全文搜寻就是去查index。  LIKE是用Regular Expression去做查询。  MySQL全文...

全文索引原理介绍

  • 2017年12月06日 16:23
  • 620KB
  • 下载

sql全文索引

  • 2014年11月20日 11:00
  • 916B
  • 下载

mysql全文索引笔记1

full-text MySQL支持全文索引(Full-Text) 已经很久了,目前,fulltext是一种只适用于MyISAM表的一个索引类型, 而且对定义索引列的数据类型也有限制,只能是以下三种的组...

lucene全文索引

  • 2015年06月25日 11:23
  • 3.69MB
  • 下载

Oracle全文索引使用方法

接近千万数据表中有个name字段,存放中文名称,现在需要根据name字段模糊匹配查询数据,一般的做法是对name字段建立b*tree索引,查询用like'%name%',但是经过测试,这种写法没有走索...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于全文索引的动态维护
举报原因:
原因补充:

(最多只允许输入30个字)