【lucene】lucene索引文件的读取器都是单向的只能向前不能后退读

 **凡是通过 `IndexInput`/`IndexOutput` 的 `readXxx / writeXxx` 系列方法读写的底层流** 都是**单向顺序或随机定位**;  
但 Lucene 在**高层**提供了几种不同的“游标”语义,要分清:

1. **PostingsEnum / DocsEnum / ImpactsEnum**  
   → **单向、不可回退**。用完就丢,想再扫必须重新要一个新的实例。

2. **TermsEnum(词典迭代器)**  
   → 也是**单向**,`seekCeil / seekExact` 只能向前定位;不能回到已扫过的 term。

3. **StoredFieldsVisitor / TermVectors**  
   → 读取某个文档的**完整字段/词向量**时,内部会**随机定位**到 `.fdx/.fdt/.tvx/.tvd` 的指定字节位置。  
   这里**不是顺序流**,而是 **“按 docId 随机 seek”**,但也**不会回退到比当前 doc 更小的位置**。

4. **Points / DocValues / Norms**  
   → 同样支持按 docId **随机 seek**,但读出的迭代器依旧**单向**。

5. **IndexInput 本身**  
   → 你可以随时 `seek(pos)` 到任意字节位置,**可以前后跳**,但这是**底层字节流**;  
   Lucene 的**倒排迭代器不会暴露这种能力**给搜索层。

### 一句话总结

- **倒排链、词典、 postings 相关迭代器:单向,不可回退。**  
- **字段、向量、点值、DocValues:可以按 doc 随机定位,但读出的迭代器仍单向。**  
- **底层 `IndexInput`:支持任意 `seek`,但 Lucene 的高层 API 基本不用它来回滚。**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值