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
This commit is contained in:
ManyTheFish
2025-09-30 17:34:29 +02:00
parent 194ace6bd1
commit b23f66d696
2 changed files with 6 additions and 3 deletions

View File

@@ -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)?
}

View File

@@ -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<SearchResult, ResponseError> {
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)
}