lucene源码-创建IndexReader--2
总体上分为三步
1) 读取段信息(segment_N, si文件) , 获取segmentinfos对象, 其下有private List<SegmentCommitInfo> segments = new ArrayList<>(); SegmentCommitInfo类代表了每次的提交信息, segmentCommitInfo下包括SegmentInfo
2) 读取Field信息(fnm,fdt,fdx文件), 根据segmentInfo创建segmentReader实例, 创建segmentreader实例时创建segmentcorereader实例, 创建这个实例时创建
FieldProducer实例, 这个实例是读取term, doc, payload, offset等倒排表的接口
3) 根据所有的segmentReader合并为compositeReader
一 :SegmentInfo:段的相关信息,包括名称,目录及相关文件。
public final String name;目录中唯一的段名
private int docCount; 段中的文档数
public final Directory dir;段的存储目录
private boolean isCompoundFile; 是否为组合文件
private Set setFiles; 段所关联的文件
二 :SegmentCommitInfo:嵌入一个[只读] SegmentInfo,以及 添加了 每次 commit都要用到的属性。
public final SegmentInfo info;段信息
private int delCount;段中已删除的文档数
private long delGen;.del 文件的版本号。DelGen 是每当IndexWriter 向索引文件中提交删除操作的时候,加1,并生成
新的.del 文件
private long nextWriteDelGen;下一个文件版本delGen+1 用于删除操作
private volatile long sizeInBytes;段所关联文件的总大小
三 :SegmentInfos:segmentInfo对象的集合及操作段相关的文件的方法。
segments_N文件中存贮着以下信息:
Header:
Version:统计在删除和添加文档时,索引被更改了多少次
NameCounter:用于为新的segment文件生成新的名
SegName:段的名字,用于所有构成segment索引文件的文件名前缀
DelGen:表示删除文件的的版本号。
DeletionCount:记录该segment中删除的文档数目
Checksum:用来校验打开的索引文件的完整性
SegCodec:段用到的编码器
CommitUserData:存储用户提供的MAP数据

浙公网安备 33010602011771号