mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-10-31 07:56:28 +00:00 
			
		
		
		
	Add the faceting.max_values_per_facet setting
This commit is contained in:
		| @@ -282,6 +282,34 @@ make_setting_route!( | ||||
|     } | ||||
| ); | ||||
|  | ||||
| make_setting_route!( | ||||
|     "/faceting", | ||||
|     patch, | ||||
|     meilisearch_lib::index::updates::TypoSettings, | ||||
|     faceting, | ||||
|     "faceting", | ||||
|     analytics, | ||||
|     |setting: &Option<meilisearch_lib::index::updates::FacetingSettings>, req: &HttpRequest| { | ||||
|         use serde_json::json; | ||||
|  | ||||
|         analytics.publish( | ||||
|             "Faceting Updated".to_string(), | ||||
|             json!({ | ||||
|                 "faceting": { | ||||
|                     "max_values_per_facet": setting | ||||
|                         .as_ref() | ||||
|                         .and_then(|s| s.max_values_per_facet | ||||
|                             .as_ref() | ||||
|                             .set() | ||||
|                             .map(|s| s.one_typo.set())) | ||||
|                         .flatten(), | ||||
|                 }, | ||||
|             }), | ||||
|             Some(req), | ||||
|         ); | ||||
|     } | ||||
| ); | ||||
|  | ||||
| macro_rules! generate_configure { | ||||
|     ($($mod:ident),*) => { | ||||
|         pub fn configure(cfg: &mut web::ServiceConfig) { | ||||
|   | ||||
| @@ -68,6 +68,17 @@ pub struct TypoSettings { | ||||
|     #[serde(default, skip_serializing_if = "Setting::is_not_set")] | ||||
|     pub disable_on_attributes: Setting<BTreeSet<String>>, | ||||
| } | ||||
|  | ||||
| #[cfg_attr(test, derive(proptest_derive::Arbitrary))] | ||||
| #[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)] | ||||
| #[serde(deny_unknown_fields)] | ||||
| #[serde(rename_all = "camelCase")] | ||||
| pub struct FacetingSettings { | ||||
|     #[cfg_attr(test, proptest(strategy = "test::setting_strategy()"))] | ||||
|     #[serde(default, skip_serializing_if = "Setting::is_not_set")] | ||||
|     pub max_values_per_facet: Setting<usize>, | ||||
| } | ||||
|  | ||||
| /// Holds all the settings for an index. `T` can either be `Checked` if they represents settings | ||||
| /// whose validity is guaranteed, or `Unchecked` if they need to be validated. In the later case, a | ||||
| /// call to `check` will return a `Settings<Checked>` from a `Settings<Unchecked>`. | ||||
| @@ -114,6 +125,9 @@ pub struct Settings<T> { | ||||
|     #[serde(default, skip_serializing_if = "Setting::is_not_set")] | ||||
|     #[cfg_attr(test, proptest(strategy = "test::setting_strategy()"))] | ||||
|     pub typo_tolerance: Setting<TypoSettings>, | ||||
|     #[serde(default, skip_serializing_if = "Setting::is_not_set")] | ||||
|     #[cfg_attr(test, proptest(strategy = "test::setting_strategy()"))] | ||||
|     pub faceting: Setting<FacetingSettings>, | ||||
|  | ||||
|     #[serde(skip)] | ||||
|     pub _kind: PhantomData<T>, | ||||
| @@ -131,6 +145,7 @@ impl Settings<Checked> { | ||||
|             synonyms: Setting::Reset, | ||||
|             distinct_attribute: Setting::Reset, | ||||
|             typo_tolerance: Setting::Reset, | ||||
|             faceting: Setting::Reset, | ||||
|             _kind: PhantomData, | ||||
|         } | ||||
|     } | ||||
| @@ -146,6 +161,7 @@ impl Settings<Checked> { | ||||
|             synonyms, | ||||
|             distinct_attribute, | ||||
|             typo_tolerance, | ||||
|             faceting, | ||||
|             .. | ||||
|         } = self; | ||||
|  | ||||
| @@ -159,6 +175,7 @@ impl Settings<Checked> { | ||||
|             synonyms, | ||||
|             distinct_attribute, | ||||
|             typo_tolerance, | ||||
|             faceting, | ||||
|             _kind: PhantomData, | ||||
|         } | ||||
|     } | ||||
| @@ -198,6 +215,7 @@ impl Settings<Unchecked> { | ||||
|             synonyms: self.synonyms, | ||||
|             distinct_attribute: self.distinct_attribute, | ||||
|             typo_tolerance: self.typo_tolerance, | ||||
|             faceting: self.faceting, | ||||
|             _kind: PhantomData, | ||||
|         } | ||||
|     } | ||||
| @@ -427,6 +445,16 @@ pub fn apply_settings_to_builder( | ||||
|         } | ||||
|         Setting::NotSet => (), | ||||
|     } | ||||
|  | ||||
|     match settings.faceting { | ||||
|         Setting::Set(ref value) => match value.max_values_per_facet { | ||||
|             Setting::Set(val) => builder.set_max_values_per_facet(val), | ||||
|             Setting::Reset => builder.reset_max_values_per_facet(), | ||||
|             Setting::NotSet => (), | ||||
|         }, | ||||
|         Setting::Reset => builder.reset_max_values_per_facet(), | ||||
|         Setting::NotSet => (), | ||||
|     } | ||||
| } | ||||
|  | ||||
| #[cfg(test)] | ||||
|   | ||||
		Reference in New Issue
	
	Block a user