Lucene40SkipListWriter

来源:转载


多级跳跃表是保存在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不用写长度。



分享给朋友:
您可能感兴趣的文章:
随机阅读: