From 461b5118bd97b18797ccdf6cdad55e2205e3ffc1 Mon Sep 17 00:00:00 2001 From: ManyTheFish Date: Wed, 7 Jun 2023 11:24:40 +0200 Subject: [PATCH] Add API search setting --- meilisearch-types/src/error.rs | 1 + meilisearch/src/routes/indexes/search.rs | 5 +++++ meilisearch/src/search.rs | 10 ++++++++++ milli/examples/search.rs | 1 + milli/src/search/mod.rs | 5 +++-- milli/src/search/new/matches/mod.rs | 1 + milli/src/search/new/mod.rs | 1 + 7 files changed, 22 insertions(+), 2 deletions(-) diff --git a/meilisearch-types/src/error.rs b/meilisearch-types/src/error.rs index 3e08498de..cb6f78c94 100644 --- a/meilisearch-types/src/error.rs +++ b/meilisearch-types/src/error.rs @@ -224,6 +224,7 @@ InvalidIndexLimit , InvalidRequest , BAD_REQUEST ; InvalidIndexOffset , InvalidRequest , BAD_REQUEST ; InvalidIndexPrimaryKey , InvalidRequest , BAD_REQUEST ; InvalidIndexUid , InvalidRequest , BAD_REQUEST ; +InvalidRestrictSearchableAttributes , InvalidRequest , BAD_REQUEST ; InvalidSearchAttributesToCrop , InvalidRequest , BAD_REQUEST ; InvalidSearchAttributesToHighlight , InvalidRequest , BAD_REQUEST ; InvalidSearchAttributesToRetrieve , InvalidRequest , BAD_REQUEST ; diff --git a/meilisearch/src/routes/indexes/search.rs b/meilisearch/src/routes/indexes/search.rs index cb70147cd..db0aedda5 100644 --- a/meilisearch/src/routes/indexes/search.rs +++ b/meilisearch/src/routes/indexes/search.rs @@ -70,6 +70,8 @@ pub struct SearchQueryGet { crop_marker: String, #[deserr(default, error = DeserrQueryParamError)] matching_strategy: MatchingStrategy, + #[deserr(default, error = DeserrQueryParamError)] + pub restrict_searchable_attributes: Option>, } impl From for SearchQuery { @@ -102,6 +104,9 @@ impl From for SearchQuery { highlight_post_tag: other.highlight_post_tag, crop_marker: other.crop_marker, matching_strategy: other.matching_strategy, + restrict_searchable_attributes: other + .restrict_searchable_attributes + .map(|o| o.into_iter().collect()), } } } diff --git a/meilisearch/src/search.rs b/meilisearch/src/search.rs index b2858ead3..3a91ea655 100644 --- a/meilisearch/src/search.rs +++ b/meilisearch/src/search.rs @@ -73,6 +73,8 @@ pub struct SearchQuery { pub crop_marker: String, #[deserr(default, error = DeserrJsonError, default)] pub matching_strategy: MatchingStrategy, + #[deserr(default, error = DeserrJsonError, default)] + pub restrict_searchable_attributes: Option>, } impl SearchQuery { @@ -128,6 +130,8 @@ pub struct SearchQueryWithIndex { pub crop_marker: String, #[deserr(default, error = DeserrJsonError, default)] pub matching_strategy: MatchingStrategy, + #[deserr(default, error = DeserrJsonError, default)] + pub restrict_searchable_attributes: Option>, } impl SearchQueryWithIndex { @@ -153,6 +157,7 @@ impl SearchQueryWithIndex { highlight_post_tag, crop_marker, matching_strategy, + restrict_searchable_attributes, } = self; ( index_uid, @@ -176,6 +181,7 @@ impl SearchQueryWithIndex { highlight_post_tag, crop_marker, matching_strategy, + restrict_searchable_attributes, // do not use ..Default::default() here, // rather add any missing field from `SearchQuery` to `SearchQueryWithIndex` }, @@ -291,6 +297,10 @@ pub fn perform_search( search.query(query); } + if let Some(ref searchable) = query.restrict_searchable_attributes { + search.searchable_attributes(searchable); + } + let is_finite_pagination = query.is_finite_pagination(); search.terms_matching_strategy(query.matching_strategy.into()); diff --git a/milli/examples/search.rs b/milli/examples/search.rs index 87c9a004d..829cb6244 100644 --- a/milli/examples/search.rs +++ b/milli/examples/search.rs @@ -57,6 +57,7 @@ fn main() -> Result<(), Box> { false, &None, &None, + None, GeoSortStrategy::default(), 0, 20, diff --git a/milli/src/search/mod.rs b/milli/src/search/mod.rs index 9cdada837..2f97143cc 100644 --- a/milli/src/search/mod.rs +++ b/milli/src/search/mod.rs @@ -28,7 +28,7 @@ pub struct Search<'a> { offset: usize, limit: usize, sort_criteria: Option>, - searchable_attributes: Option>, + searchable_attributes: Option<&'a [String]>, geo_strategy: new::GeoSortStrategy, terms_matching_strategy: TermsMatchingStrategy, scoring_strategy: ScoringStrategy, @@ -77,7 +77,7 @@ impl<'a> Search<'a> { self } - pub fn searchable_attributes(&mut self, searchable: Vec) -> &mut Search<'a> { + pub fn searchable_attributes(&mut self, searchable: &'a [String]) -> &mut Search<'a> { self.searchable_attributes = Some(searchable); self } @@ -126,6 +126,7 @@ impl<'a> Search<'a> { self.exhaustive_number_hits, &self.filter, &self.sort_criteria, + self.searchable_attributes, self.geo_strategy, self.offset, self.limit, diff --git a/milli/src/search/new/matches/mod.rs b/milli/src/search/new/matches/mod.rs index f33d595e5..d70bb1550 100644 --- a/milli/src/search/new/matches/mod.rs +++ b/milli/src/search/new/matches/mod.rs @@ -514,6 +514,7 @@ mod tests { false, &None, &None, + None, crate::search::new::GeoSortStrategy::default(), 0, 100, diff --git a/milli/src/search/new/mod.rs b/milli/src/search/new/mod.rs index 8df764f29..e72093bf8 100644 --- a/milli/src/search/new/mod.rs +++ b/milli/src/search/new/mod.rs @@ -355,6 +355,7 @@ pub fn execute_search( exhaustive_number_hits: bool, filters: &Option, sort_criteria: &Option>, + searchable_attributes: Option<&[String]>, geo_strategy: geo_sort::Strategy, from: usize, length: usize,