Skip to content

动手实验

English · 中文版

先在仓库根目录安装:

uv sync

所有 lab 都是确定性的;需要持久化时会使用临时目录。

1. 载荷过滤

uv run python -m miniqdrant.labs.filtering

预期输出 Matching ids: [1, 3] 以及所选计划。点 2 在向量上相似,但属于 租户 b,因此被排除。重点观察公开 Collection API 如何组合向量评分与载荷 索引候选集。

2. 不可变分段与优化

uv run python -m miniqdrant.labs.segments

预期:

Segments before optimize: 2
Segments after optimize: 1

每轮 upsert + flush 发布一个不可变分段;optimize() 将两个已发布分段压缩成 一个,同时保持集合内容不变。

3. 关闭与重启恢复

uv run python -m miniqdrant.labs.recovery

预期输出 Restored ids: [1, 2]。实验执行 flush、close,再打开新的 Database,迫使元数据与分段状态经过公开生命周期边界完成恢复。

4. 比较四种搜索计划

uv run python -m miniqdrant.labs.plan_comparison

预期计划标签为 exact_full_scanhnswfiltered_hnswquantized_hnsw_rescore,并各自带 visited_count。比较工作量与命中 ID, 但同时阅读与 Qdrant 的差异:量化分支虽有教学 计划名,实际是解码 int8 后全扫并用 float 重评分。

5. HNSW 召回率

uv run python -m miniqdrant.labs.recall

固定种子会在 80 个点上运行 5 个查询并打印平均 recall@5(当前夹具为 1.000)。精确搜索提供参考集合,指标统计精确 top-5 ID 有多少也出现在 HNSW 候选中。这是可复现实验,不是生产基准测试。

可按行为矩阵继续运行聚焦测试,或用 uv run pytest -q 运行全部测试。