From 4e9accdeb7dbc63a50a7b3d53535288cdbd660f7 Mon Sep 17 00:00:00 2001 From: Irevoire Date: Wed, 18 May 2022 13:17:56 +0200 Subject: [PATCH] chore(search): rename in the search endpoint Fix ##2376 --- .../src/analytics/segment_analytics.rs | 8 +-- meilisearch-http/src/routes/indexes/search.rs | 20 +++----- meilisearch-http/tests/search/formatted.rs | 12 ++--- meilisearch-http/tests/search/mod.rs | 18 +++---- meilisearch-lib/src/index/search.rs | 49 ++++++++----------- meilisearch-lib/src/index_controller/mod.rs | 10 ++-- 6 files changed, 50 insertions(+), 67 deletions(-) diff --git a/meilisearch-http/src/analytics/segment_analytics.rs b/meilisearch-http/src/analytics/segment_analytics.rs index 3d3b23d70..9b70d81e7 100644 --- a/meilisearch-http/src/analytics/segment_analytics.rs +++ b/meilisearch-http/src/analytics/segment_analytics.rs @@ -363,7 +363,7 @@ pub struct SearchAggregator { highlight_pre_tag: bool, highlight_post_tag: bool, crop_marker: bool, - matches: bool, + show_matches_position: bool, crop_length: bool, } @@ -419,7 +419,7 @@ impl SearchAggregator { ret.highlight_post_tag = query.highlight_post_tag != DEFAULT_HIGHLIGHT_POST_TAG; ret.crop_marker = query.crop_marker != DEFAULT_CROP_MARKER; ret.crop_length = query.crop_length != DEFAULT_CROP_LENGTH; - ret.matches = query.matches; + ret.show_matches_position = query.show_matches_position; ret } @@ -472,7 +472,7 @@ impl SearchAggregator { self.highlight_pre_tag |= other.highlight_pre_tag; self.highlight_post_tag |= other.highlight_post_tag; self.crop_marker |= other.crop_marker; - self.matches |= other.matches; + self.show_matches_position |= other.show_matches_position; self.crop_length |= other.crop_length; } @@ -515,7 +515,7 @@ impl SearchAggregator { "highlight_pre_tag": self.highlight_pre_tag, "highlight_post_tag": self.highlight_post_tag, "crop_marker": self.crop_marker, - "matches": self.matches, + "show_matches_position": self.show_matches_position, "crop_length": self.crop_length, }, }); diff --git a/meilisearch-http/src/routes/indexes/search.rs b/meilisearch-http/src/routes/indexes/search.rs index 14d36c1b3..869bc4931 100644 --- a/meilisearch-http/src/routes/indexes/search.rs +++ b/meilisearch-http/src/routes/indexes/search.rs @@ -36,8 +36,8 @@ pub struct SearchQueryGet { filter: Option, sort: Option, #[serde(default = "Default::default")] - matches: bool, - facets_distribution: Option, + show_matches_position: bool, + facets: Option, #[serde(default = "default_highlight_pre_tag")] highlight_pre_tag: String, #[serde(default = "default_highlight_post_tag")] @@ -60,8 +60,8 @@ impl From for SearchQuery { .attributes_to_highlight .map(|attrs| attrs.split(',').map(String::from).collect()); - let facets_distribution = other - .facets_distribution + let facets = other + .facets .map(|attrs| attrs.split(',').map(String::from).collect()); let filter = match other.filter { @@ -84,8 +84,8 @@ impl From for SearchQuery { attributes_to_highlight, filter, sort, - matches: other.matches, - facets_distribution, + show_matches_position: other.show_matches_position, + facets, highlight_pre_tag: other.highlight_pre_tag, highlight_post_tag: other.highlight_post_tag, crop_marker: other.crop_marker, @@ -169,10 +169,6 @@ pub async fn search_with_url_query( let search_result = search_result?; - // Tests that the nb_hits is always set to false - #[cfg(test)] - assert!(!search_result.exhaustive_nb_hits); - debug!("returns: {:?}", search_result); Ok(HttpResponse::Ok().json(search_result)) } @@ -207,10 +203,6 @@ pub async fn search_with_post( let search_result = search_result?; - // Tests that the nb_hits is always set to false - #[cfg(test)] - assert!(!search_result.exhaustive_nb_hits); - debug!("returns: {:?}", search_result); Ok(HttpResponse::Ok().json(search_result)) } diff --git a/meilisearch-http/tests/search/formatted.rs b/meilisearch-http/tests/search/formatted.rs index 19387bdc5..9876bac3a 100644 --- a/meilisearch-http/tests/search/formatted.rs +++ b/meilisearch-http/tests/search/formatted.rs @@ -16,7 +16,7 @@ async fn formatted_contain_wildcard() { index.wait_task(1).await; let (response, code) = index - .search_post(json!({ "q": "pesti", "attributesToRetrieve": ["father", "mother"], "attributesToHighlight": ["father", "mother", "*"], "attributesToCrop": ["doggos"], "matches": true })) + .search_post(json!({ "q": "pesti", "attributesToRetrieve": ["father", "mother"], "attributesToHighlight": ["father", "mother", "*"], "attributesToCrop": ["doggos"], "showMatchesPosition": true })) .await; assert_eq!(code, 200, "{}", response); assert_eq!( @@ -26,7 +26,7 @@ async fn formatted_contain_wildcard() { "id": "852", "cattos": "pesti", }, - "_matchesInfo": {"cattos": [{"start": 0, "length": 5}]}, + "_matchesPosition": {"cattos": [{"start": 0, "length": 5}]}, }) ); @@ -44,7 +44,7 @@ async fn formatted_contain_wildcard() { let (response, code) = index .search_post( - json!({ "q": "pesti", "attributesToRetrieve": ["*"], "attributesToHighlight": ["id"], "matches": true }), + json!({ "q": "pesti", "attributesToRetrieve": ["*"], "attributesToHighlight": ["id"], "showMatchesPosition": true }), ) .await; assert_eq!(code, 200, "{}", response); @@ -57,7 +57,7 @@ async fn formatted_contain_wildcard() { "id": "852", "cattos": "pesti", }, - "_matchesInfo": {"cattos": [{"start": 0, "length": 5}]}, + "_matchesPosition": {"cattos": [{"start": 0, "length": 5}]}, }) ); @@ -145,7 +145,7 @@ async fn format_nested() { let (response, code) = index .search_post( - json!({ "q": "bobby", "attributesToRetrieve": ["doggos.name"], "matches": true }), + json!({ "q": "bobby", "attributesToRetrieve": ["doggos.name"], "showMatchesPosition": true }), ) .await; assert_eq!(code, 200, "{}", response); @@ -160,7 +160,7 @@ async fn format_nested() { "name": "buddy", }, ], - "_matchesInfo": {"doggos.name": [{"start": 0, "length": 5}]}, + "_matchesPosition": {"doggos.name": [{"start": 0, "length": 5}]}, }) ); diff --git a/meilisearch-http/tests/search/mod.rs b/meilisearch-http/tests/search/mod.rs index d9b36e85d..c570e8b06 100644 --- a/meilisearch-http/tests/search/mod.rs +++ b/meilisearch-http/tests/search/mod.rs @@ -420,11 +420,11 @@ async fn search_facet_distribution() { index .search( json!({ - "facetsDistribution": ["title"] + "facets": ["title"] }), |response, code| { assert_eq!(code, 200, "{}", response); - let dist = response["facetsDistribution"].as_object().unwrap(); + let dist = response["facetDistribution"].as_object().unwrap(); assert_eq!(dist.len(), 1); assert!(dist.get("title").is_some()); }, @@ -445,12 +445,12 @@ async fn search_facet_distribution() { index .search( json!({ - // "facetsDistribution": ["father", "doggos.name"] - "facetsDistribution": ["father"] + // "facets": ["father", "doggos.name"] + "facets": ["father"] }), |response, code| { assert_eq!(code, 200, "{}", response); - let dist = response["facetsDistribution"].as_object().unwrap(); + let dist = response["facetDistribution"].as_object().unwrap(); assert_eq!(dist.len(), 1); assert_eq!( dist["father"], @@ -474,11 +474,11 @@ async fn search_facet_distribution() { index .search( json!({ - "facetsDistribution": ["doggos.name"] + "facets": ["doggos.name"] }), |response, code| { assert_eq!(code, 200, "{}", response); - let dist = response["facetsDistribution"].as_object().unwrap(); + let dist = response["facetDistribution"].as_object().unwrap(); assert_eq!(dist.len(), 1); assert_eq!( dist["doggos.name"], @@ -491,11 +491,11 @@ async fn search_facet_distribution() { index .search( json!({ - "facetsDistribution": ["doggos"] + "facets": ["doggos"] }), |response, code| { assert_eq!(code, 200, "{}", response); - let dist = response["facetsDistribution"].as_object().unwrap(); + let dist = response["facetDistribution"].as_object().unwrap(); dbg!(&dist); assert_eq!(dist.len(), 3); assert_eq!( diff --git a/meilisearch-lib/src/index/search.rs b/meilisearch-lib/src/index/search.rs index bf543b377..097a91570 100644 --- a/meilisearch-lib/src/index/search.rs +++ b/meilisearch-lib/src/index/search.rs @@ -18,7 +18,7 @@ use super::error::{IndexError, Result}; use super::index::Index; pub type Document = serde_json::Map; -type MatchesInfo = BTreeMap>; +type MatchesPosition = BTreeMap>; pub const DEFAULT_SEARCH_LIMIT: usize = 20; const fn default_search_limit() -> usize { @@ -63,10 +63,10 @@ pub struct SearchQuery { pub attributes_to_highlight: Option>, // Default to false #[serde(default = "Default::default")] - pub matches: bool, + pub show_matches_position: bool, pub filter: Option, pub sort: Option>, - pub facets_distribution: Option>, + pub facets: Option>, #[serde(default = "default_highlight_pre_tag")] pub highlight_pre_tag: String, #[serde(default = "default_highlight_post_tag")] @@ -81,24 +81,21 @@ pub struct SearchHit { pub document: Document, #[serde(rename = "_formatted", skip_serializing_if = "Document::is_empty")] pub formatted: Document, - #[serde(rename = "_matchesInfo", skip_serializing_if = "Option::is_none")] - pub matches_info: Option, + #[serde(rename = "_matchesPosition", skip_serializing_if = "Option::is_none")] + pub matches_position: Option, } #[derive(Serialize, Debug, Clone, PartialEq)] #[serde(rename_all = "camelCase")] pub struct SearchResult { pub hits: Vec, - pub nb_hits: u64, - pub exhaustive_nb_hits: bool, + pub estimated_total_hits: u64, pub query: String, pub limit: usize, pub offset: usize, pub processing_time_ms: u128, #[serde(skip_serializing_if = "Option::is_none")] - pub facets_distribution: Option>>, - #[serde(skip_serializing_if = "Option::is_none")] - pub exhaustive_facets_count: Option, + pub facet_distribution: Option>>, } impl Index { @@ -222,13 +219,13 @@ impl Index { let mut document = permissive_json_pointer::select_values(&displayed_document, attributes_to_retrieve); - let (matches_info, formatted) = format_fields( + let (matches_position, formatted) = format_fields( &displayed_document, &fields_ids_map, &formatter_builder, &analyzer, &formatted_options, - query.matches, + query.show_matches_position, &displayed_ids, )?; @@ -239,38 +236,34 @@ impl Index { let hit = SearchHit { document, formatted, - matches_info, + matches_position, }; documents.push(hit); } - let nb_hits = candidates.len(); + let estimated_total_hits = candidates.len(); - let facets_distribution = match query.facets_distribution { + let facet_distribution = match query.facets { Some(ref fields) => { - let mut facets_distribution = self.facets_distribution(&rtxn); + let mut facet_distribution = self.facets_distribution(&rtxn); if fields.iter().all(|f| f != "*") { - facets_distribution.facets(fields); + facet_distribution.facets(fields); } - let distribution = facets_distribution.candidates(candidates).execute()?; + let distribution = facet_distribution.candidates(candidates).execute()?; Some(distribution) } None => None, }; - let exhaustive_facets_count = facets_distribution.as_ref().map(|_| false); // not implemented yet - let result = SearchResult { - exhaustive_nb_hits: false, // not implemented yet hits: documents, - nb_hits, + estimated_total_hits, query: query.q.clone().unwrap_or_default(), limit: query.limit, offset: query.offset.unwrap_or_default(), processing_time_ms: before_search.elapsed().as_millis(), - facets_distribution, - exhaustive_facets_count, + facet_distribution, }; Ok(result) } @@ -445,8 +438,8 @@ fn format_fields<'a, A: AsRef<[u8]>>( formatted_options: &BTreeMap, compute_matches: bool, displayable_ids: &BTreeSet, -) -> Result<(Option, Document)> { - let mut matches = compute_matches.then(BTreeMap::new); +) -> Result<(Option, Document)> { + let mut matches_position = compute_matches.then(BTreeMap::new); let mut document = document.clone(); // select the attributes to retrieve @@ -477,7 +470,7 @@ fn format_fields<'a, A: AsRef<[u8]>>( compute_matches, ); - if let Some(matches) = matches.as_mut() { + if let Some(matches) = matches_position.as_mut() { if !infos.is_empty() { matches.insert(key.to_owned(), infos); } @@ -491,7 +484,7 @@ fn format_fields<'a, A: AsRef<[u8]>>( .map(|&fid| field_ids_map.name(fid).unwrap()); let document = permissive_json_pointer::select_values(&document, selectors); - Ok((matches, document)) + Ok((matches_position, document)) } fn format_value<'a, A: AsRef<[u8]>>( diff --git a/meilisearch-lib/src/index_controller/mod.rs b/meilisearch-lib/src/index_controller/mod.rs index 77ff2621b..a302f12da 100644 --- a/meilisearch-lib/src/index_controller/mod.rs +++ b/meilisearch-lib/src/index_controller/mod.rs @@ -687,10 +687,10 @@ mod test { attributes_to_crop: None, crop_length: 18, attributes_to_highlight: None, - matches: true, + show_matches_position: true, filter: None, sort: None, - facets_distribution: None, + facets: None, highlight_pre_tag: default_highlight_pre_tag(), highlight_post_tag: default_highlight_post_tag(), crop_marker: default_crop_marker(), @@ -698,14 +698,12 @@ mod test { let result = SearchResult { hits: vec![], - nb_hits: 29, - exhaustive_nb_hits: true, + estimated_total_hits: 29, query: "hello world".to_string(), limit: 24, offset: 0, processing_time_ms: 50, - facets_distribution: None, - exhaustive_facets_count: Some(true), + facet_distribution: None, }; let mut uuid_store = MockIndexMetaStore::new();