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;
10-20
3700
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交