Add the faceting.max_values_per_facet setting

This commit is contained in:
Kerollmops 2022-06-08 17:08:10 +02:00
parent c924614527
commit 5450b5ced3
No known key found for this signature in database
GPG Key ID: 92ADA4E935E71FA4
2 changed files with 56 additions and 0 deletions

View File

@ -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) {

View File

@ -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)]