From fc0eb3901d0a49879d0683f9f47fcad176cac763 Mon Sep 17 00:00:00 2001 From: Louis Dureuil Date: Thu, 8 Jun 2023 17:02:28 +0200 Subject: [PATCH] Gate `_rankingScore` behind `showRankingScore` query parameter --- meilisearch-types/src/error.rs | 1 + meilisearch/src/routes/indexes/search.rs | 3 +++ meilisearch/src/search.rs | 13 ++++++++++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/meilisearch-types/src/error.rs b/meilisearch-types/src/error.rs index ae6e42c17..3e08498de 100644 --- a/meilisearch-types/src/error.rs +++ b/meilisearch-types/src/error.rs @@ -240,6 +240,7 @@ InvalidSearchOffset , InvalidRequest , BAD_REQUEST ; InvalidSearchPage , InvalidRequest , BAD_REQUEST ; InvalidSearchQ , InvalidRequest , BAD_REQUEST ; InvalidSearchShowMatchesPosition , InvalidRequest , BAD_REQUEST ; +InvalidSearchShowRankingScore , InvalidRequest , BAD_REQUEST ; InvalidSearchShowRankingScoreDetails , InvalidRequest , BAD_REQUEST ; InvalidSearchSort , InvalidRequest , BAD_REQUEST ; InvalidSettingsDisplayedAttributes , InvalidRequest , BAD_REQUEST ; diff --git a/meilisearch/src/routes/indexes/search.rs b/meilisearch/src/routes/indexes/search.rs index 46c1d90d9..cb70147cd 100644 --- a/meilisearch/src/routes/indexes/search.rs +++ b/meilisearch/src/routes/indexes/search.rs @@ -56,6 +56,8 @@ pub struct SearchQueryGet { sort: Option, #[deserr(default, error = DeserrQueryParamError)] show_matches_position: Param, + #[deserr(default, error = DeserrQueryParamError)] + show_ranking_score: Param, #[deserr(default, error = DeserrQueryParamError)] show_ranking_score_details: Param, #[deserr(default, error = DeserrQueryParamError)] @@ -93,6 +95,7 @@ impl From for SearchQuery { filter, sort: other.sort.map(|attr| fix_sort_query_parameters(&attr)), show_matches_position: other.show_matches_position.0, + show_ranking_score: other.show_ranking_score.0, show_ranking_score_details: other.show_ranking_score_details.0, facets: other.facets.map(|o| o.into_iter().collect()), highlight_pre_tag: other.highlight_pre_tag, diff --git a/meilisearch/src/search.rs b/meilisearch/src/search.rs index 8f2a27570..38773199e 100644 --- a/meilisearch/src/search.rs +++ b/meilisearch/src/search.rs @@ -55,6 +55,8 @@ pub struct SearchQuery { pub attributes_to_highlight: Option>, #[deserr(default, error = DeserrJsonError, default)] pub show_matches_position: bool, + #[deserr(default, error = DeserrJsonError, default)] + pub show_ranking_score: bool, #[deserr(default, error = DeserrJsonError, default)] pub show_ranking_score_details: bool, #[deserr(default, error = DeserrJsonError)] @@ -106,6 +108,8 @@ pub struct SearchQueryWithIndex { pub crop_length: usize, #[deserr(default, error = DeserrJsonError)] pub attributes_to_highlight: Option>, + #[deserr(default, error = DeserrJsonError, default)] + pub show_ranking_score: bool, #[deserr(default, error = DeserrJsonError, default)] pub show_ranking_score_details: bool, #[deserr(default, error = DeserrJsonError, default)] @@ -139,6 +143,7 @@ impl SearchQueryWithIndex { attributes_to_crop, crop_length, attributes_to_highlight, + show_ranking_score, show_ranking_score_details, show_matches_position, filter, @@ -161,6 +166,7 @@ impl SearchQueryWithIndex { attributes_to_crop, crop_length, attributes_to_highlight, + show_ranking_score, show_ranking_score_details, show_matches_position, filter, @@ -209,10 +215,10 @@ pub struct SearchHit { pub formatted: Document, #[serde(rename = "_matchesPosition", skip_serializing_if = "Option::is_none")] pub matches_position: Option, + #[serde(rename = "_rankingScore", skip_serializing_if = "Option::is_none")] + pub ranking_score: Option, #[serde(rename = "_rankingScoreDetails", skip_serializing_if = "Option::is_none")] pub ranking_score_details: Option>, - #[serde(rename = "_rankingScore")] - pub ranking_score: u64, } #[derive(Serialize, Debug, Clone, PartialEq)] @@ -428,7 +434,8 @@ pub fn perform_search( insert_geo_distance(sort, &mut document); } - let ranking_score = ScoreDetails::global_score_linear_scale(score.iter()); + let ranking_score = + query.show_ranking_score.then(|| ScoreDetails::global_score_linear_scale(score.iter())); let ranking_score_details = query.show_ranking_score_details.then(|| ScoreDetails::to_json_map(score.iter()));