From b23f66d696672d0d5fe61600a876fc7dd5aebb38 Mon Sep 17 00:00:00 2001 From: ManyTheFish Date: Tue, 30 Sep 2025 17:34:29 +0200 Subject: [PATCH] feat: add indexUid to SearchMetadata - Add indexUid field to SearchMetadata struct - Update perform_search to include indexUid in metadata - Update federated search to include indexUid for each query The metadata field now contains both queryUid and indexUid: - For /search: single object with queryUid and indexUid - For /multi-search: each result has metadata with both fields - For federated search: array of objects, each with queryUid and indexUid --- crates/meilisearch/src/search/federated/perform.rs | 3 ++- crates/meilisearch/src/search/mod.rs | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/crates/meilisearch/src/search/federated/perform.rs b/crates/meilisearch/src/search/federated/perform.rs index 7e02e6615..e0685aacc 100644 --- a/crates/meilisearch/src/search/federated/perform.rs +++ b/crates/meilisearch/src/search/federated/perform.rs @@ -63,7 +63,8 @@ pub async fn perform_federated_search( let mut query_metadata = Vec::new(); for (query_index, federated_query) in queries.into_iter().enumerate() { let query_uid = Uuid::now_v7(); - query_metadata.push(SearchMetadata { query_uid }); + query_metadata + .push(SearchMetadata { query_uid, index_uid: federated_query.index_uid.to_string() }); partitioned_queries.partition(federated_query, query_index, &network, features)? } diff --git a/crates/meilisearch/src/search/mod.rs b/crates/meilisearch/src/search/mod.rs index 260cbb146..f6eb9347d 100644 --- a/crates/meilisearch/src/search/mod.rs +++ b/crates/meilisearch/src/search/mod.rs @@ -841,6 +841,7 @@ pub struct SearchHit { #[schema(rename_all = "camelCase")] pub struct SearchMetadata { pub query_uid: Uuid, + pub index_uid: String, } #[derive(Serialize, Clone, PartialEq, ToSchema)] @@ -1143,6 +1144,7 @@ pub fn perform_search( request_uid: Uuid, ) -> Result { let before_search = Instant::now(); + let index_uid_for_metadata = index_uid.clone(); let rtxn = index.read_txn()?; let time_budget = match index.search_cutoff(&rtxn)? { Some(cutoff) => TimeBudget::new(Duration::from_millis(cutoff)), @@ -1163,7 +1165,7 @@ pub fn perform_search( query_vector, }, semantic_hit_count, - ) = search_from_kind(index_uid, search_kind, search)?; + ) = search_from_kind(index_uid.clone(), search_kind, search)?; let SearchQuery { q, @@ -1260,7 +1262,7 @@ pub fn perform_search( used_negative_operator, semantic_hit_count, request_uid: Some(request_uid), - metadata: Some(SearchMetadata { query_uid }), + metadata: Some(SearchMetadata { query_uid, index_uid: index_uid_for_metadata }), }; Ok(result) }