SegmentInfos
segmentInfo对象的集合,其中包含用于与文件系统相关的段进行操作的方法。
索引中的活动段存储在段信息文件 segments_N中,索引中可能有一个或多个segments_N文件,但是具有最大值的那个是有效的段信息文件(当存在较旧的segments_N文件时,因为它们暂时无法删除,或者,writer正在提交,或者正在使用自定义 IndexDeletionPolicy
)。此文件按名称列出每个段,并包含有关编解码器和删除的generation的详细信息。
还有一个segments.gen文件,该文件包含当前索引的generation(segments_N中的N)。这仅用作备用,以防单独的目录列表无法准确确定当前的generation(对于某些具有基于时间的目录缓存到期的NFS客户端的情况)。此文件简单地包含一个 Int32版本Header( FORMAT_SEGMENTS_GEN_CURRENT),接着的是以Int64格式写入两次的generation
文件:
- segments.gen: GenHeader, Generation, Generation, Footer
- segments_N: Header, Version, NameCounter, SegCount, <SegName, SegCodec, DelGen, DeletionCount, FieldInfosGen, DocValuesGen, UpdatesFiles>SegCount, CommitUserData, Footer
数据类型:
- Header --> CodecHeader
- GenHeader, NameCounter, SegCount, DeletionCount --> Int32
- Generation, Version, DelGen, Checksum, FieldInfosGen, DocValuesGen --> Int64
- SegName, SegCodec --> String
- CommitUserData --> Map<String,String>
- UpdatesFiles --> Map<Int32, Set<String>>
- Footer --> CodecFooter
字段描述:
- Version计数通过添加或删除文档来更改索引的频率.
- NameCounter用于为新段文件生成名称
- SegName是段的名称,并用作组成段索引的所有文件的文件名前缀。
- DelGen是删除文件的generation计数。如果这是-1,则没有删除。大于零的任何值意味着存储了删除的LiveDocsFormat
- DeletionCount记录此段中已删除文档的数量
- SegCodec是编码此段的解码器的名称
- CommitUserData存储用户提供的可选的不透明Map <String,String>传递给IndexWriter.setCommitData(java.util.Map).
- FieldInfosGen是fieldInfos文件的generation计数。如果为-1,则该段中的fieldInfos没有更新,大于零的任何值意味着存储的fieldInfos都有更新
- DocValuesGen是可更新DocValues的生成计数。如果为-1,则该段中的DocValues没有更新。大于零的任何意味着存储的DocValues都有更新
- DocValuesGen是可更新DocValues的generation计数。如果为-1,则该段中的DocValues没有更新。大于零的任何意味着存储的DocValues都有更新
- UpdatesFiles存储每个字段在该段中更新的文件集
Lucene40SegmentInfoFormat
文件:
- .si: Header, SegVersion, SegSize, IsCompoundFile, Diagnostics, Attributes, Files
数据类型:
- Header --> CodecHeader
- SegSize --> Int32
- SegVersion --> String
- Files --> Set<String>
- Diagnostics, Attributes --> Map<String,String>
- IsCompoundFile --> Int8
字段描述:
- SegVersion是创建的段的代码版本。
- SegSize是段索引中包含的文档数
- IsCompoundFile记录段是否写为复合文件。如果为-1,则该段不是复合文件。如果为1,则段是复合文件。
- Checksum 包含segments_N文件中所有字节的CRC32校验和,这用于在打开索引时验证文件的完整性
- Diagnostics Map由其
IndexWriter
创建的每个段作为调试辅助工具私密编写。它包括元数据,如当前的Lucene版本,操作系统,Java版本,创建段的原因(merge,flush,addIndexes)等。 - Attributes:编解码器 - 私有属性的键值映射
- Files 是此段引用的文件列表