DirectoryReader ireader= DirectoryReader.open(directory)
public static DirectoryReader open(final Directory directory) throws IOException {
return StandardDirectoryReader.open(directory, null);
}
StandardDirectoryReader.open(directory, null)先调用SegmentInfos.FindSegmentsFile的run方法,获取当前活动的文件名
gen = getLastCommitGeneration(files);<--generationFromSegmentsFileName(String fileName)
。。。
String segmentFileName = IndexFileNames.fileNameFromGeneration(IndexFileNames.SEGMENTS, "", gen);
T t = doBody(segmentFileName);
SegmentInfos sis = SegmentInfos.readCommit(directory, segmentFileName);//获取文件信息
readers[i] = new SegmentReader(sis.info(i), IOContext.READ)//在for循环里构造每个SegmentReader
return new StandardDirectoryReader(directory, readers, null, sis, false)//构造StandardDirectoryReader
综上,可知,流程为:找打最新的segments_文件,通过这个文件找到相应的si、cfe、cfs文件