下面给出 PointValues 范围查询 从“拿到查询条件”到“交出 DocIdSetIterator”全流程的逐行级拆解。
(以 8.x 代码 为基准,变量名与源码一致,方便你直接对照。)
---
1. 入口:工厂方法
```java
IntPoint.newRangeQuery("price", 30, 70)
```
→ 创建 `PointRangeQuery` 子类实例,仅保存:
- `field`, `numDims`, `bytesPerDim`, `lowerPoint[]`, `upperPoint[]`
此时连 IndexReader 都还没碰。
---
2. 创建 Weight(仍无 IO)
```java
createWeight(searcher, scoreMode, boost)
```
→ 返回匿名 `ConstantScoreWeight(this, boost)`
仍然不读索引。
---
3. 创建 ScorerSupplier(依然懒加载)
```java
scorerSupplier(LeafReaderContext ctx)
```
→ 拿到 `PointValues values = reader.getPointValues(field)`

最低0.47元/天 解锁文章
1072

被折叠的 条评论
为什么被折叠?



