CLucene中文件.tii文件和.tis文件格式

 词典(tis)及词典索引(tii)信息

termdictionary

在词典中,所有的词是按照字典顺序排序的。

  • 词典文件(tis)
    • TermCount:词典中包含的总的词数
    • IndexInterval:为了加快对词的查找速度,也应用类似跳跃表的结构,假设IndexInterval为4,则在词典索引(tii)文件中保存第4个,第8个,第12个词,这样可以加快在词典文件中查找词的速度。
    • SkipInterval:倒排表无论是文档号及词频,还是位置信息,都是以跳跃表的结构存在的,SkipInterval是跳跃的步数。
    • MaxSkipLevels:跳跃表是多层的,这个值指的是跳跃表的最大层数。
    • TermCount个项的数组,每一项代表一个词,对于每一个词,以前缀后缀规则存放词的文本信息(PrefixLength + Suffix),词属于的域的域号(FieldNum),有多少篇文档包含此词(DocFreq),此词的倒排表在frq,prx中的偏移量(FreqDelta, ProxDelta),此词的倒排表的跳跃表在frq中的偏移量(SkipDelta),这里之所以用Delta,是应用差值规则。
  • 词典索引文件(tii)
    • 词典索引文件是为了加快对词典文件中词的查找速度,保存每隔IndexInterval个词。
    • 词典索引文件是会被全部加载到内存中去的。
    • IndexTermCount = TermCount / IndexInterval:词典索引文件中包含的词数。
    • IndexInterval同词典文件中的IndexInterval。
    • SkipInterval同词典文件中的SkipInterval。
    • MaxSkipLevels同词典文件中的MaxSkipLevels。
    • IndexTermCount个项的数组,每一项代表一个词,每一项包括两部分,第一部分是词本身(TermInfo),第二部分是在词典文件中的偏移量(IndexDelta)。假设IndexInterval为4,此数组中保存第4个,第8个,第12个词。。。

 

两个文件的头是相同的,内容如下:

output->writeInt(FORMAT);                      // 4个字节  FF FF FF FD -3
output->writeLong(0);                          // leave space for size   文件中保存的term 的数量
output->writeInt(indexInterval);// write indexInterval   每页存储的term 数量  值 为128
output->writeInt(skipInterval); // write skipInterval    16

 output->writeInt(maxSkipLevels);       10

词典文件(tis) 相关代码:

writeTerm(fieldNumber, termText, termTextLength);
        // write doc freq
        output->writeVInt(ti->docFreq);
        //write pointers
        output->writeVLong(ti->freqPointer - lastTi->freqPointer);
        output->writeVLong(ti->proxPointer - lastTi->proxPointer);
        
        if (ti->docFreq >= skipInterval) {
            output->writeVInt(ti->skipOffset);
        }

term的文件格式:
    output->writeVInt(start);                     // write shared prefix length
    output->writeVInt(length);                  // write delta length
    output->writeChars(termText+start, length);  // write delta chars
    output->writeVInt(fieldNumber); // write field num

对于词典索引文件多一项:

if (isIndex){
            output->writeVLong(other->output->getFilePointer() - lastIndexPointer);
            lastIndexPointer = other->output->getFilePointer(); // write pointer
        }  在词典中的偏移量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值