2021SC@SDUSC
然而当我们要打开一个索引的时候,我们必须要选择一个来打开。Lucene 采取以下过程:
其 一 , 在 所 有 的 segments_N 中 选 择 N 最 大 的 一 个 。 基 本 逻 辑 参 照
SegmentInfos.getCurrentSegmentGeneration(File[] files) , 其 基 本 思 路 就 是 在 所 有 以
segments 开头,并且不是 segments.gen 的文件中,选择 N 最大的一个作为 genA。
其二,打开 segments.gen,其中保存了当前的 N 值。其格式如下,读出版本号(Version),
然后再读出两个 N,如果两者相等,则作为 genB。
IndexInput genInput =directory.openInput(IndexFileNames.SEGMENTS_GEN);//“segments.gen”
int version = genInput.readInt();//读出版本号
if (version == FORMAT_LOCKLESS) {//如果版本号正确
long gen0 = genInput.readLong();//读出第一个 N
long gen1 = genInput.readLong();//读出第二个 N
if (gen0 == gen1) {//如果两者相等则为 genB
genB = gen0;
}
}
其三,在上述得到的genA和genB中选择最大的那个作为当前的N,方才打开segments_N
文件。其基本逻辑如下:
if (genA > genB)
gen = genA;
else
gen = genB;
lucene7
博客详细解析了Lucene如何选择并打开正确的segment。首先,它从segments_N文件中选取N值最大的作为genA。然后,读取segments.gen文件获取版本号和两个N值,若相等则作为genB。最后,比较genA和genB,选取较大者作为当前的N,用于打开segments_N文件。这个过程确保了索引的正确性和一致性。
摘要由CSDN通过智能技术生成