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初探之数据格式详情的主要内容,如果未能解决你的问题,请参考以下文章