分页查询
普通标量查询使用 LIMIT/OFFSET 限定范围,计数独立执行:
SELECT * FROM book_vectors WHERE word_count > 0 LIMIT 10 OFFSET 10;
SELECT COUNT(*) FROM book_vectors WHERE word_count > 0;
dbVisitor 用法
在 Mapper 方法中增加 Page 参数。实体映射见实体映射。
@Query("SELECT * FROM book_vectors WHERE word_count > 0")
List<BookVector> findPage(Page page);
Page page = new PageObject(1, 10);
List<BookVector> rows = mapper.findPage(page);
页码从 0 开始。 Page 在原命令末尾追加 LIMIT/OFFSET,因此原命令不要已有分页、结尾分号或 WITH 选项。带 WITH 的查询直接在命令中指定分页,不再传 Page。
注意事项
标量排序
Milvus 不提供普通字段的 ORDER BY;不要把不同请求的分页视为稳定快照。
页大小与计数
Page 控制本次返回范围,fetchSize 控制内部取页。KNN 的总数不是 TopK 数量;向量范围查询不要请求自动计数。完整规则见 SELECT。
总数和取页是两次请求,并发写入可能使两次结果不一致。公共 API 见 9.5 分页。
构造器迭代查询
iteratorByBatch 和 iteratorForLimit 按 LIMIT/OFFSET 分次查询,每页读取后释放结果集。各页不共享服务端快照,并发写入可能影响后续页;iteratorForLimit 的 limit 为负数时表示不限制总量。
分批选取主键再删除时,每次重新读取第一页。删除后继续递增 OFFSET 会跳过记录。