From 6196a536682f39f6e1a5c0f1a6d4edba0365babf Mon Sep 17 00:00:00 2001 From: Louis Dureuil Date: Thu, 22 Jun 2023 23:12:29 +0200 Subject: [PATCH] Gate score_details behind a runtime experimental feature flag --- meilisearch/src/routes/indexes/search.rs | 9 +++++++-- meilisearch/src/routes/multi_search.rs | 4 +++- meilisearch/src/search.rs | 6 ++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/meilisearch/src/routes/indexes/search.rs b/meilisearch/src/routes/indexes/search.rs index cb70147cd..3ab093b5d 100644 --- a/meilisearch/src/routes/indexes/search.rs +++ b/meilisearch/src/routes/indexes/search.rs @@ -151,7 +151,9 @@ pub async fn search_with_url_query( let mut aggregate = SearchAggregator::from_query(&query, &req); let index = index_scheduler.index(&index_uid)?; - let search_result = tokio::task::spawn_blocking(move || perform_search(&index, query)).await?; + let features = index_scheduler.features()?; + let search_result = + tokio::task::spawn_blocking(move || perform_search(&index, query, features)).await?; if let Ok(ref search_result) = search_result { aggregate.succeed(search_result); } @@ -183,7 +185,10 @@ pub async fn search_with_post( let mut aggregate = SearchAggregator::from_query(&query, &req); let index = index_scheduler.index(&index_uid)?; - let search_result = tokio::task::spawn_blocking(move || perform_search(&index, query)).await?; + + let features = index_scheduler.features()?; + let search_result = + tokio::task::spawn_blocking(move || perform_search(&index, query, features)).await?; if let Ok(ref search_result) = search_result { aggregate.succeed(search_result); } diff --git a/meilisearch/src/routes/multi_search.rs b/meilisearch/src/routes/multi_search.rs index fd78df5e5..e257af1cf 100644 --- a/meilisearch/src/routes/multi_search.rs +++ b/meilisearch/src/routes/multi_search.rs @@ -41,6 +41,7 @@ pub async fn multi_search_with_post( let queries = params.into_inner().queries; let mut multi_aggregate = MultiSearchAggregator::from_queries(&queries, &req); + let features = index_scheduler.features()?; // Explicitly expect a `(ResponseError, usize)` for the error type rather than `ResponseError` only, // so that `?` doesn't work if it doesn't use `with_index`, ensuring that it is not forgotten in case of code @@ -74,8 +75,9 @@ pub async fn multi_search_with_post( err }) .with_index(query_index)?; + let search_result = - tokio::task::spawn_blocking(move || perform_search(&index, query)) + tokio::task::spawn_blocking(move || perform_search(&index, query, features)) .await .with_index(query_index)?; diff --git a/meilisearch/src/search.rs b/meilisearch/src/search.rs index b2858ead3..62f49c148 100644 --- a/meilisearch/src/search.rs +++ b/meilisearch/src/search.rs @@ -5,6 +5,7 @@ use std::time::Instant; use deserr::Deserr; use either::Either; +use index_scheduler::RoFeatures; use meilisearch_auth::IndexSearchRules; use meilisearch_types::deserr::DeserrJsonError; use meilisearch_types::error::deserr_codes::*; @@ -281,6 +282,7 @@ pub fn add_search_rules(query: &mut SearchQuery, rules: IndexSearchRules) { pub fn perform_search( index: &Index, query: SearchQuery, + features: RoFeatures, ) -> Result { let before_search = Instant::now(); let rtxn = index.read_txn()?; @@ -306,6 +308,10 @@ pub fn perform_search( ScoringStrategy::Skip }); + if query.show_ranking_score_details { + features.check_score_details()?; + } + // compute the offset on the limit depending on the pagination mode. let (offset, limit) = if is_finite_pagination { let limit = query.hits_per_page.unwrap_or_else(DEFAULT_SEARCH_LIMIT);