Lucene初探之数据格式详情

Posted Derrick_gu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lucene初探之数据格式详情相关的知识,希望对你有一定的参考价值。

Lucene初探之数据格式详情(二)

接上一篇Lucene初探之数据格式详情(-)

补充一下Segment_N文件的具体格式:

  • DocStoreOffset
  • DocStoreSegment
  • DocStorelsCompoundFile
    • Lucene中存储域和词向量有两种方案。第一种是每个段单独存储自己的域和词向量信息;第二种是多个段共享域和词向量,把域和词向量存储到一个段里面去。
    • 如果DocStoreOffset值为-1,则该Segment段的后续正向相关信息的存储采用第一种方案,即单独存储自己的域和词向量信息;也就是说当前segment的段名为A,则当前索引目录下便会有相应的A.fdt,A.fdx,A.tvf,A.tvd,A.tvx文件等,DocStoreSegment和DocStoreCompoundFile则不存在;
    • 当DocStoreOffset不为-1,则代表当前段的信息存储方案是第二种方案,即和其它段共享。此时,DocStoreOffset的值为当前段的域和词向量信息在共享段中的位置偏移量,而DocStoreSegment则存储了共享存储段的名称,比如共享存储段名为B,那么此段的信息将被存储在B.fdt,B.fdx等文件中;
    • IndexWrtier.flush(boolean triggerMerge, boolean flushDocStores, boolean flushDeletes),这个方法中的flushDocStores是用来设置是否采用共享存储的方案,最终,其会落到DocumentsWriter.closeDocStore()方法,如果flushDocStores为false,则这个方法不被调用,那么下次再添加新的信息进来的时候,由于上一次打开的DocumentsWriter还没有被关闭掉,则本次添加的信息会写入同上一次写入的文件相同的段文件中。
  • HasSingeNormFile
    • 之前我们介绍过,在调用搜索引擎进行搜索操作的时候,搜索引擎最终会对匹配到的文件进行一次权重打分,其中标准化因子在打分的过程中发挥了很大的作用;不同的文档的域都可以有自己的标准化因子,当HasSingleNormFile的值为1的时候,所有的标准化因子都存在.nrm文件中,表示所有的文档都以统一的标准化因子来打分;如果不为1,则每个段都可以在.fN文件中设置自己的标准化因子,其中N为版本号。
  • NumField
    • 域的数量;
  • NormGen
    • 是一个数组;如果每个域都有自己的标准化因子,则数组描述每个标准化因子文件的版本号;
  • isCompoundFile
    • 是否为复合文件,也就是将同一个段的所有文件保存在同一个文件中,减少每次打开段的时候打开文件的数量,其可以通过IndexWriter.setUserCompoundFile()来控制;
  • DeletionCount
    • 记录了此段中被删除文档的数目;
  • HasProx
    • 可为0、1,如果有词频需要被保存,则将其置为1;
  • checkSum
    • 此文件的segment_N的校验和;

上面这些基本上是段的基本数据格式,下一篇我们去了解一下域的相关数据格式

以上是关于Lucene初探之数据格式详情的主要内容,如果未能解决你的问题,请参考以下文章

Lucene初探之数据格式详情

Lucene初探之数据格式详情

Lucene初探之数据格式详情

Lucene初探之数据格式详情

Lucene初探之数据格式详情

Lucene初探之数据格式详情