lucene7

博客详细解析了Lucene如何选择并打开正确的segment。首先,它从segments_N文件中选取N值最大的作为genA。然后,读取segments.gen文件获取版本号和两个N值,若相等则作为genB。最后,比较genA和genB,选取较大者作为当前的N,用于打开segments_N文件。这个过程确保了索引的正确性和一致性。
摘要由CSDN通过智能技术生成

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个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值