一个索引(Index)可以同时存在多个 segments_N(至于如何存在多个 segments_N,在描述完详细信息之后会举例说明),然而当我们要打开一个索引的时候,我们必须要选择一个来打开。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;
lucene分析7
最新推荐文章于 2022-02-13 01:34:36 发布