Skip to content

Commit a79d168

Browse files
committed
Refactor to clarify leaf search levels
1 parent ba34a1e commit a79d168

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
@@ -1177,9 +1177,10 @@ impl CanSplitDoBetter {
11771177
}
11781178
}
11791179

1180-
/// `multi_leaf_search` searches multiple indices and multiple splits.
1180+
/// Searches multiple splits, potentially in multiple indices, sitting on different storages and
1181+
/// having different doc mappings.
11811182
#[instrument(skip_all, fields(index = ?leaf_search_request.search_request.as_ref().unwrap().index_id_patterns))]
1182-
pub async fn multi_leaf_search(
1183+
pub async fn multi_index_leaf_search(
11831184
searcher_context: Arc<SearcherContext>,
11841185
leaf_search_request: LeafSearchRequest,
11851186
storage_resolver: &StorageResolver,
@@ -1227,18 +1228,25 @@ pub async fn multi_leaf_search(
12271228
})?
12281229
.clone();
12291230

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

@@ -1271,29 +1279,6 @@ pub async fn multi_leaf_search(
12711279
.context("failed to merge split search responses")?
12721280
}
12731281

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

1320-
/// `leaf` step of search.
1305+
/// Searches multiple splits from a specific index and a single doc mapping
13211306
///
13221307
/// The leaf search collects all kind of information, and returns a set of
13231308
/// [PartialHit](quickwit_proto::search::PartialHit) candidates. The root will be in
13241309
/// charge to consolidate, identify the actual final top hits to display, and
13251310
/// fetch the actual documents to convert the partial hits into actual Hits.
13261311
#[instrument(skip_all, fields(index = ?request.index_id_patterns))]
1327-
pub async fn leaf_search(
1312+
pub async fn single_doc_mapping_leaf_search(
13281313
searcher_context: Arc<SearcherContext>,
13291314
request: Arc<SearchRequest>,
13301315
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::{oneshot, Semaphore};
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::schema::OwnedValue as TantivyValue;
3232
use tantivy::time::OffsetDateTime;
3333
use tantivy::Term;
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;
@@ -1049,7 +1049,7 @@ async fn test_search_util(test_sandbox: &TestSandbox, query: &str) -> Vec<u32> {
10491049

10501050
let agg_limits = searcher_context.get_aggregation_limits();
10511051

1052-
let search_response = leaf_search(
1052+
let search_response = single_doc_mapping_leaf_search(
10531053
searcher_context,
10541054
request,
10551055
test_sandbox.storage(),

0 commit comments

Comments
 (0)