Skip to content

Commit ff29f84

Browse files
committed
修复BQ自动路由劫持暴力搜索基线的问题
- 新增 force_brute_force 字段:显式禁用自动BQ路由,确保基准测试对照组可靠 - 修复 pipeline.rs 路由逻辑:use_bq 增加 !force_brute_force 前置判断 - 修复所有benchmark:brute_cfg 统一加 force_brute_force: true (bench_medium / bq_vs_brute / bench_500k) - 根因:原 total_nodes > 20_000 会无视 enable_bq_coarse_search: false, 导致所有 >20K 节点的 BruteForce vs BQ 对比数据完全失真
1 parent aa31712 commit ff29f84

5 files changed

Lines changed: 14 additions & 4 deletions

File tree

benches/bench_500k.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,7 @@ fn main() {
337337
let brute_cfg = SearchConfig {
338338
top_k,
339339
enable_bq_coarse_search: false,
340+
force_brute_force: true,
340341
..Default::default()
341342
};
342343
let bq_cfg = SearchConfig {

benches/bench_medium.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ fn main() {
227227
let brute_cfg = SearchConfig {
228228
top_k: TOP_K,
229229
enable_bq_coarse_search: false,
230+
force_brute_force: true,
230231
..Default::default()
231232
};
232233
let t_brute = Instant::now();

benches/bq_vs_brute.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ fn run_precision_report(n: usize, dim: usize, top_k: usize, num_queries: usize)
193193
let brute_config = SearchConfig {
194194
top_k,
195195
enable_bq_coarse_search: false,
196+
force_brute_force: true,
196197
..Default::default()
197198
};
198199
eprintln!(
@@ -360,6 +361,7 @@ fn bench_brute_vs_bq(c: &mut Criterion) {
360361
let brute_cfg = SearchConfig {
361362
top_k: 10,
362363
enable_bq_coarse_search: false,
364+
force_brute_force: true,
363365
..Default::default()
364366
};
365367
let mut group = c.benchmark_group("BQ_Rocket_vs_Brute_200k_dim1536");

src/database/config.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ pub struct SearchConfig {
6565
pub enable_bq_coarse_search: bool,
6666
/// BQ 粗筛候选集占总数据量的比例
6767
pub bq_candidate_ratio: f32,
68+
/// 强制使用暴力搜索,禁用自动 BQ 路由(用于基准测试和需要精确结果的场景)
69+
/// 当为 true 时,即使 node_count > 20,000 也不会自动切换到 BQ 管线
70+
pub force_brute_force: bool,
6871

6972
// --- 混合倒排与文本检索 (Hybrid Search) ---
7073
/// 启用文本混合查询时,决定文本匹配的分数提权倍率 (Boost)
@@ -98,6 +101,7 @@ impl Default for SearchConfig {
98101
lateral_inhibition_threshold: 0,
99102
enable_bq_coarse_search: false,
100103
bq_candidate_ratio: 0.05,
104+
force_brute_force: false,
101105
text_boost: 1.5,
102106
enable_text_hybrid_search: false,
103107
bm25_k1: 1.2,

src/database/pipeline.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -276,12 +276,14 @@ fn recall_vector<T: VectorType>(
276276

277277
// ═══════════════════════════════════════════════════════
278278
// 动态引擎路由:基于数据规模的自适应多级管线
279-
// 1. N <= 20,000 => 暴力全扫 (AVX2 极限)
280-
// 2. 20,000 < N <= 100,000 => BQ 双级管线
281-
// 3. 100,000 < N => BQ 三级火箭
279+
// 1. force_brute_force == true => 暴力全扫(无视数据量,用于基准测试)
280+
// 2. N <= 20,000 => 暴力全扫 (AVX2 极限)
281+
// 3. 20,000 < N <= 100,000 => BQ 双级管线
282+
// 4. 100,000 < N => BQ 三级火箭
282283
// ═══════════════════════════════════════════════════════
283284
let total_nodes = mt.node_count();
284-
let use_bq = config.enable_bq_coarse_search || total_nodes > 20_000;
285+
let use_bq = !config.force_brute_force
286+
&& (config.enable_bq_coarse_search || total_nodes > 20_000);
285287
let use_int8_rocket = total_nodes > 100_000;
286288

287289
let vector_hits: Vec<SearchHit> = if use_bq {

0 commit comments

Comments
 (0)