clucene中segments_N文件分析

1, 作用

保存段索引的元数据。注意,只是元数据,实际真正的数据是保存在Field和Term中的。

物理结构分析

1, Format  索引文件版本4个字节,由于Lucene还在不断的开发,因此不同版本的Lucene有自己的特定版本号

ff ff ff fc   值为-4

2 Version 索引的版本号,8个字节,通过这个字段来判断索引的版本以及是否被更新 

     00 00 01 6d de 02 79 64 

3 counter 是下一个新段(Segment)的段名 4个字节  如00 00 00 01  值为1 

4 size  段的大小 4个字节 , 如00 00 00 01, 值 为1,表示只有一个段 这一组会重复个数

     1) SegName, 段名字 大小    第一个字节表示长度,后面是段名 如

02 5f 30  ,02表示后面两个字节5F 30的字符串为_0

writeByte占一个字节

   2)  SegSize, 这个段中索引的文件个数  占4个节字   output->writeInt(docCount);

   3)  DelGen, .del文件的版本号 占8个字节,如果是-1,表示没删除任何文档。(在Lucene中,被删除的文档不是立即物理删除,它们被保存在.del中,optimize的时候才会被物理清空)。这里建立的索引中DelGen为-1.如ff ff ff ff ff ff ff  ff 

  4) DocStoreOffset   域(Stored Field)和词向量(Term Vector)的存储信息   占4个字节

如果DocStoreOffset为-1,则此段单独存储自己的域和词向量,从存储文件上来看,如果此段段名为XXX,则此段有自己的XXX.fdt,XXX.fdx,XXX.tvf,XXX.tvd,XXX.tvx文件。DocStoreSegment和DocStoreIsCompoundFile在此处不被保存。

如果DocStoreOffset不为-1,则DocStoreSegment保存了共享的段的名字,比如为YYY,DocStoreOffset则为此段的域及词向量信息在共享段中的偏移量。则此段没有自己的XXX.fdt,XXX.fdx,XXX.tvf,XXX.tvd,XXX.tvx文件,而是将信息存放在共享段的YYY.fdt,YYY.fdx,YYY.tvf,YYY.tvd,YYY.tvx文件中。
代码为:if (docStoreOffset != -1) {
           output->writeString(docStoreSegment);
           output->writeByte(static_cast<uint8_t>(docStoreIsCompoundFile ? 1:0));
       }

5) HasSingleNormFile  占一个字节 

在搜索的过程中,标准化因子(Normalization Factor)会影响文档最后的评分,不同的文档重要性不同,不同的域重要性也不同。因而每个文档的每个域都可以有自己的标准化因子。如果HasSingleNormFile为1,则所有的标准化因子都是存在.nrm 文件中的。如果HasSingleNormFile不是1,则每个域都有自己的标准化因子文件.fN。 如FF 表示-1

6) NumField, NormGen数组的大小, 若为-1 则没有NormGens  占4个字节,如果有,先是4个字节长度,然后每一个占8个字节

相关代码:

if (normGen.values == NULL) {
           output->writeInt(NO);
       } else {
       output->writeInt(normGen.length);
       for(size_t j = 0; j < normGen.length; j++) {
               output->writeLong(normGen[j]);
           }
       }

7)  IsCompoundFile, 表示是否使用了复合文件,即.cfs。这里为-1,和实际相符。占一个字节FF

   

 

          

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值