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

**凡是通过 `IndexInput`/`IndexOutput` 的 `readXxx / writeXxx` 系列方法读写的底层流** 都是**单向顺序或随机定位**;

但 Lucene 在**高层**提供了几种不同的"游标"语义,要分清:

  1. **PostingsEnum / DocsEnum / ImpactsEnum**

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

  1. **TermsEnum(词典迭代器)**

→ 也是**单向**,`seekCeil / seekExact` 只能向前定位;不能回到已扫过的 term。

  1. **StoredFieldsVisitor / TermVectors**

→ 读取某个文档的**完整字段/词向量**时,内部会**随机定位**到 `.fdx/.fdt/.tvx/.tvd` 的指定字节位置。

这里**不是顺序流**,而是 **"按 docId 随机 seek"**,但也**不会回退到比当前 doc 更小的位置**。

  1. **Points / DocValues / Norms**

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

  1. **IndexInput 本身**

→ 你可以随时 `seek(pos)` 到任意字节位置,**可以前后跳**,但这是**底层字节流**;

Lucene 的**倒排迭代器不会暴露这种能力**给搜索层。

一句话总结

  • **倒排链、词典、 postings 相关迭代器:单向,不可回退。**

  • **字段、向量、点值、DocValues:可以按 doc 随机定位,但读出的迭代器仍单向。**

  • **底层 `IndexInput`:支持任意 `seek`,但 Lucene 的高层 API 基本不用它来回滚。**

相关推荐
sniper_fandc2 天前
Elasticsearch从入门到进阶——搜索优化原理
elasticsearch·搜索引擎·lucene·1024程序员节
酥酥禾5 天前
C# LINQ常用语法
solr·lucene
cyh男14 天前
lucene中AutomatonQuery类的作用
lucene
cyh男14 天前
lucene中的PointRangeQuery和PointInSetQuery有什么区别
lucene
cyh男14 天前
为什么ES中不推荐使用wildcard查询
elasticsearch·lucene
渣渣盟16 天前
中文分词技术全解析
搜索引擎·全文检索·lucene
cyh男1 个月前
lucene 8.7.0 版本中的倒排索引、数字、DocValues三种类型的查询性能对比
lucene
cyh男1 个月前
Lucene 8.7.0 版本中dvd、dvm文件详解
lucene
是犹橐籥1 个月前
头歌Educoder答案 Lucene - 全文检索入门
搜索引擎·全文检索·lucene
cyh男1 个月前
Lucene 8.7.0 版本中docFreq、totalTermFreq、getDocCount等方法的含义
lucene