Skip to content

Commit bb2cf53

Browse files
committed
Refactor to clarify leaf search levels
1 parent 257418c commit bb2cf53

File tree

3 files changed

+28
-43
lines changed

3 files changed

+28
-43
lines changed

quickwit/quickwit-search/src/leaf.rs

Lines changed: 24 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,9 +1174,10 @@ impl CanSplitDoBetter {
11741174
}
11751175
}
11761176

1177-
/// `multi_leaf_search` searches multiple indices and multiple splits.
1177+
/// Searches multiple splits, potentially in multiple indices, sitting on different storages and
1178+
/// having different doc mappings.
11781179
#[instrument(skip_all, fields(index = ?leaf_search_request.search_request.as_ref().unwrap().index_id_patterns))]
1179-
pub async fn multi_leaf_search(
1180+
pub async fn multi_index_leaf_search(
11801181
searcher_context: Arc<SearcherContext>,
11811182
leaf_search_request: LeafSearchRequest,
11821183
storage_resolver: &StorageResolver,
@@ -1224,18 +1225,25 @@ pub async fn multi_leaf_search(
12241225
})?
12251226
.clone();
12261227

1227-
let leaf_request_future = tokio::spawn(
1228-
resolve_storage_and_leaf_search(
1229-
searcher_context.clone(),
1230-
search_request.clone(),
1231-
index_uri,
1232-
storage_resolver.clone(),
1233-
leaf_search_request_ref.split_offsets,
1234-
doc_mapper,
1235-
aggregation_limits.clone(),
1236-
)
1237-
.in_current_span(),
1238-
);
1228+
let leaf_request_future = tokio::spawn({
1229+
let storage_resolver = storage_resolver.clone();
1230+
let searcher_context = searcher_context.clone();
1231+
let search_request = search_request.clone();
1232+
let aggregation_limits = aggregation_limits.clone();
1233+
async move {
1234+
let storage = storage_resolver.resolve(&index_uri).await?;
1235+
single_doc_mapping_leaf_search(
1236+
searcher_context,
1237+
search_request,
1238+
storage,
1239+
leaf_search_request_ref.split_offsets,
1240+
doc_mapper,
1241+
aggregation_limits,
1242+
)
1243+
.await
1244+
}
1245+
.in_current_span()
1246+
});
12391247
leaf_request_tasks.push(leaf_request_future);
12401248
}
12411249

@@ -1268,29 +1276,6 @@ pub async fn multi_leaf_search(
12681276
.context("failed to merge split search responses")?
12691277
}
12701278

1271-
/// Resolves storage and calls leaf_search
1272-
#[allow(clippy::too_many_arguments)]
1273-
async fn resolve_storage_and_leaf_search(
1274-
searcher_context: Arc<SearcherContext>,
1275-
search_request: Arc<SearchRequest>,
1276-
index_uri: quickwit_common::uri::Uri,
1277-
storage_resolver: StorageResolver,
1278-
splits: Vec<SplitIdAndFooterOffsets>,
1279-
doc_mapper: Arc<DocMapper>,
1280-
aggregations_limits: AggregationLimitsGuard,
1281-
) -> crate::Result<LeafSearchResponse> {
1282-
let storage = storage_resolver.resolve(&index_uri).await?;
1283-
leaf_search(
1284-
searcher_context.clone(),
1285-
search_request.clone(),
1286-
storage.clone(),
1287-
splits,
1288-
doc_mapper,
1289-
aggregations_limits,
1290-
)
1291-
.await
1292-
}
1293-
12941279
/// Optimizes the search_request based on CanSplitDoBetter
12951280
/// Returns true if the split can return better results
12961281
fn check_optimize_search_request(
@@ -1314,14 +1299,14 @@ fn disable_search_request_hits(search_request: &mut SearchRequest) {
13141299
search_request.sort_fields.clear();
13151300
}
13161301

1317-
/// `leaf` step of search.
1302+
/// Searches multiple splits from a specific index and a single doc mapping
13181303
///
13191304
/// The leaf search collects all kind of information, and returns a set of
13201305
/// [PartialHit](quickwit_proto::search::PartialHit) candidates. The root will be in
13211306
/// charge to consolidate, identify the actual final top hits to display, and
13221307
/// fetch the actual documents to convert the partial hits into actual Hits.
13231308
#[instrument(skip_all, fields(index = ?request.index_id_patterns))]
1324-
pub async fn leaf_search(
1309+
pub async fn single_doc_mapping_leaf_search(
13251310
searcher_context: Arc<SearcherContext>,
13261311
request: Arc<SearchRequest>,
13271312
index_storage: Arc<dyn Storage>,

quickwit/quickwit-search/src/service.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ use tantivy::aggregation::AggregationLimitsGuard;
3838
use tokio::sync::{Semaphore, oneshot};
3939
use tokio_stream::wrappers::UnboundedReceiverStream;
4040

41-
use crate::leaf::multi_leaf_search;
41+
use crate::leaf::multi_index_leaf_search;
4242
use crate::leaf_cache::LeafSearchCache;
4343
use crate::list_fields::{leaf_list_fields, root_list_fields};
4444
use crate::list_fields_cache::ListFieldsCache;
@@ -204,7 +204,7 @@ impl SearchService for SearchServiceImpl {
204204
.map(|req| req.split_offsets.len())
205205
.sum::<usize>();
206206
let completion_tx = start_leaf_search_metric_recording(num_splits).await;
207-
let leaf_search_response_result = multi_leaf_search(
207+
let leaf_search_response_result = multi_index_leaf_search(
208208
self.searcher_context.clone(),
209209
leaf_search_request,
210210
&self.storage_resolver,

quickwit/quickwit-search/src/tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ use tantivy::Term;
3232
use tantivy::schema::OwnedValue as TantivyValue;
3333
use tantivy::time::OffsetDateTime;
3434

35-
use self::leaf::leaf_search;
35+
use self::leaf::single_doc_mapping_leaf_search;
3636
use super::*;
3737
use crate::find_trace_ids_collector::Span;
3838
use crate::list_terms::leaf_list_terms;
@@ -1051,7 +1051,7 @@ async fn test_search_util(test_sandbox: &TestSandbox, query: &str) -> Vec<u32> {
10511051

10521052
let agg_limits = searcher_context.get_aggregation_limits();
10531053

1054-
let search_response = leaf_search(
1054+
let search_response = single_doc_mapping_leaf_search(
10551055
searcher_context,
10561056
request,
10571057
test_sandbox.storage(),

0 commit comments

Comments
 (0)