首页 > 其他 > 详细

Lucene40SkipListWriter

时间:2014-06-14 06:37:04      阅读:378      评论:0      收藏:0      [点我收藏+]

多级跳跃表是保存在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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!