码迷,mamicode.com
首页 > 其他好文 > 详细

Lucene40SkipListWriter

时间:2014-06-14 06:36:07      阅读:386      评论:0      收藏:0      [点我收藏+]

标签:lucene   跳跃表   索引   

多级跳跃表是保存在tim文件中的。

tip是term index,tim是term dictionary。记忆方法是,p是pointer因此是term index。

这个类会保存多个level的last变量和cur变量,同时使用RAMOutputStream数组缓存不同级别跳跃表的内容,一个term的所有doc添加完后才写入tim文件。几个主要方法:

resetSkip:几个last变量重置,lastSkipFreqPointer和lastSkipProxPointer赋值为freq和prox文件的当前长度。发生在上一个term结束,下一个term开始时。

setSkipData:设置几个current变量,curFreqPointer和curProxPointer赋值为freq和prox文件的当前长度。

bufferSkip:按如下内容缓存进入不同级别的RAMOutputStream中:

(docDelta << 1) | 1        LastPayloadLength     LastOffsetLength        freqDelta     proxDelta          child

其中child是低一级的跳跃表指针。(docDelta是否shift,是否保存lastpayloadLength和lastoffsetlength看具体情况)。可以看出跳跃表是个单链表结构,如果按dicid从小到大递增,则总是指向小一个interval的位置,按dicid从大到小递减,则总是指向大一个interval的位置。lastpayloadlength和lastoffsetlength是跳跃表上一个节点最后一个position的信息,之所以保存是可以得到上个位置最后一个position的信息,但并不能因此反向遍历position列表。

writeSkip:缓存的多级跳跃表的RAMOutputStream写入tim文件中,写入时按级别从高到低写入,先是长度,然后是整个buffer,level 0不用写长度。

Lucene40SkipListWriter,布布扣,bubuko.com

Lucene40SkipListWriter

标签:lucene   跳跃表   索引   

原文地址:http://blog.csdn.net/jollyjumper/article/details/30210807

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!