From 3e4cb34bfde181c45d1daf2098f4fa6f232e7c36 Mon Sep 17 00:00:00 2001 From: Pascal Seitz Date: Thu, 23 Jul 2026 12:27:21 +0200 Subject: [PATCH] add missing to benchmark --- benches/agg_bench.rs | 43 +++++++++++++++++++ .../src/column_index/optional_index/mod.rs | 1 + 2 files changed, 44 insertions(+) diff --git a/benches/agg_bench.rs b/benches/agg_bench.rs index 114774200..2c83461c8 100644 --- a/benches/agg_bench.rs +++ b/benches/agg_bench.rs @@ -87,6 +87,7 @@ fn bench_agg(mut group: InputGroup) { register!(group, terms_many_with_avg_sub_agg); register!(group, terms_status_with_avg_sub_agg); register!(group, nested_terms_status_and_zipf_1000); + register!(group, nested_terms_status_and_zipf_1000_with_missing); register!(group, nested_terms_zipf_1000_and_status); register!(group, nested_terms_many_and_zipf_1000); register!(group, nested_terms_many_and_zipf_1000_and_status); @@ -115,6 +116,11 @@ fn bench_agg(mut group: InputGroup) { multi_terms_status_and_zipf_1000, multi_terms_status_and_zipf_1000_filtered ); + register!( + group, + multi_terms_status_and_zipf_1000_with_missing, + multi_terms_status_and_zipf_1000_with_missing_filtered + ); register!( group, multi_terms_zipf_1000_and_status, @@ -431,6 +437,26 @@ fn nested_terms_status_and_zipf_1000(index: &Index) { execute_agg(index, agg_req); } +fn nested_terms_status_and_zipf_1000_with_missing(index: &Index) { + let agg_req = json!({ + "my_texts": { + "terms": { + "field": "text_few_terms_status", + "missing": "MISSING_STATUS" + }, + "aggs": { + "nested_terms": { + "terms": { + "field": "text_1000_terms_zipf", + "missing": "MISSING_ZIPF" + } + } + } + } + }); + execute_agg(index, agg_req); +} + fn nested_terms_zipf_1000_and_status(index: &Index) { let agg_req = json!({ "my_texts": { @@ -717,6 +743,23 @@ define_multi_terms_benchmark!( }), ); +define_multi_terms_benchmark!( + /// multi_terms equivalent of nested_terms_status_and_zipf_1000_with_missing. + multi_terms_status_and_zipf_1000_with_missing, + multi_terms_status_and_zipf_1000_with_missing_filtered, + json!({ + "mt": { + "multi_terms": { + "terms": [ + {"field": "text_few_terms_status", "missing": "MISSING_STATUS"}, + {"field": "text_1000_terms_zipf", "missing": "MISSING_ZIPF"} + ], + "size": 100 + } + } + }), +); + define_multi_terms_benchmark!( /// multi_terms equivalent of nested_terms_zipf_1000_and_status: /// flat GroupBy(zipf_1000, status) vs nested terms(zipf_1000) -> terms(status) diff --git a/columnar/src/column_index/optional_index/mod.rs b/columnar/src/column_index/optional_index/mod.rs index 8dc7086d4..dd55994fe 100644 --- a/columnar/src/column_index/optional_index/mod.rs +++ b/columnar/src/column_index/optional_index/mod.rs @@ -291,6 +291,7 @@ impl OptionalIndex { doc_ids_out: &mut Vec, row_ids_out: &mut Vec, ) { + // TODO: change the API to require sorted input, and remove the fallback. if !doc_ids.is_sorted() { for &doc_id in doc_ids { if let Some(row_id) = self.rank_if_exists(doc_id) {