
VexDB-Lite 向量数据库召回率调优完全指南ef_search、brute_force_threshold 与 refine 的平衡之道【免费下载链接】VexDB-LiteA cross-platform vector database, which can be integrated into existing databases as a plugin.项目地址: https://gitcode.com/gh_mirrors/ve/VexDB-LiteVexDB-Lite 是一款可嵌入现有数据库的跨平台向量数据库插件支持以 PostgreSQL 扩展、DuckDB 扩展和 SQLite 虚拟表三种形态接入底层共享同一套自研图索引内核。本文面向新手用户用最少代码讲清 VexDB-Lite 召回率调优的三个核心开关ef_search搜索宽度、brute_force_threshold暴力搜索阈值与refine量化精排倍率帮你在延迟与召回率之间找到最佳平衡点。为什么召回率是向量数据库调优的第一指标向量检索本质是近似最近邻搜索ANN为了换速度图索引不会检查全部向量而是沿着图结构探索一小片区域。探索得越广找到真正 Top-K 结果的把握越大——这就是召回率RecallK。召回率调低了业务表现为搜不到、答非所问一味调高延迟和内存成本又会上升。VexDB-Lite 官方基准SIFT-1M128 维给出了直观的权衡曲线ef_searchRecall10PG 端QPSr15095.97%994.710098.62%618.520099.58%421.3可以看到ef_search 从 50 提到 100召回率提升约 2.7 个百分点而 QPS 下降近一半再往上调收益递减。完整测试数据见 README.zh.md。三大核心参数速览参数默认值作用设置方式以 DuckDB 为例vexdb_ef_search64查询时图搜索的候选宽度SET vexdb_ef_search 64;vexdb_brute_force_threshold10000行数低于该值时自动走全量精确扫描SET vexdb_brute_force_threshold 10000;vexdb_pq_refine_k_factor1.0关闭PQ 量化索引的精排倍率SET vexdb_pq_refine_k_factor 4.0;三者关系一句话概括brute_force_threshold 决定用不用索引ef_search 决定索引里搜多广refine 决定量化结果怎么补精度。1️⃣ ef_search召回率与延迟的主阀门ef_search控制查询时在图上维护的候选集大小是三个参数中影响最直接的一个PostgreSQLSET vexdb.ef_search 100;DuckDBSET vexdb_ef_search 100;SQLite在CREATE VIRTUAL TABLE ... USING GRAPH_INDEX(...)时以ef_search160形式指定调参建议默认 64 适合大多数场景对召回敏感的业务如以图搜图、语义去重提到 100~200注意它与建图参数m、ef_construction是建图质量 × 查询宽度的关系查询侧的ef_search不宜长期高于ef_construction太多。2️⃣ brute_force_threshold小表自动降级全量扫描这是新手最容易忽略、却最实用的一处设计。优化器在改写查询前会先比较索引节点数与阈值当行数 ≤brute_force_threshold时直接跳过图索引改写让数据库执行普通的全表扫描返回精确的 Top-K召回率天然 100%。相关判断逻辑位于 vex_optimizer.cpp。两个典型用法调低阈值小数据量时让查询自动走精确扫描无需人工干预设为 0 强制全量扫描例如批量删除后召回率异常下降时SET vexdb_brute_force_threshold 0;可临时绕过 HNSW 索引排查问题SQLite 端也可在建表时直接写brute_force_threshold0。3️⃣ refine量化索引的召回率补偿器当内存吃紧时你通常会开启 PQ乘积量化压缩向量。量化距离是近似值会拖累召回率VexDB-Lite 的refine 机制用多取候选 原向量精排来补偿先按 PQ 距离取 Topk × factor个候选再用原始向量重新排序最终返回精确距离下的 Top-K。-- 仅用 PQ 距离排序最快召回略低 SET vexdb_pq_search_mode pq_only; -- 开启精排取 4 倍候选后用原向量重排 SET vexdb_pq_refine_k_factor 4.0;关键约束与注意事项vexdb_pq_refine_k_factor取值范围为[1.0, 1000.0]1.0表示关闭精排越界会直接报错memory_mode compact下 refine 不生效——紧凑模式不保留原始向量镜像没有精排所需的原向量refine 的代价是每查询多计算k × (factor - 1)次完整向量距离factor 建议从 2~4 起步配合EXPLAIN观察执行计划再逐步放大。该机制的行为有专门的 spec 测试覆盖可参考 graph_index_pq_refine.yaml 与参数注册处 vex_extension.cpp。实战按场景选择的平衡清单场景推荐组合数据量 1 万行什么都不改靠brute_force_threshold自动走精确扫描通用在线检索百万级向量ef_search 64保持默认召回优先以图搜图/去重ef_search 150~200接受 QPS 下降内存敏感的 PQ 压缩索引pq_onlyrefine_k_factor 2.0~4.0非 compact 模式大批量删除后召回率下降临时brute_force_threshold 0排查再考虑重建索引调参顺序建议先确认数据量是否低于暴力阈值 → 再调 ef_search → 最后才碰量化与 refine每改一步用固定的评测查询集验证 RecallK避免凭感觉调参。延伸资料功能总览与三端参数对照documentation/features.md建索引参数m / ef_construction / 量化器graph_index_algorithm.hPQ 量化器内核K-means 训练、ADC 距离product_quantizer.h运行期参数校验测试含非法值报错graph_index_runtime_param_validation.yaml暴力阈值行为测试graph_index_brute_force_threshold.yaml【免费下载链接】VexDB-LiteA cross-platform vector database, which can be integrated into existing databases as a plugin.项目地址: https://gitcode.com/gh_mirrors/ve/VexDB-Lite创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考