mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-26 06:44:27 +01:00
feat(all): introduce minWordLengthForTypo
fix typo in settting skip serializing not set typo settings
This commit is contained in:
parent
981fba5b44
commit
27a88bcd47
@ -120,6 +120,7 @@ pub enum Code {
|
|||||||
IndexAlreadyExists,
|
IndexAlreadyExists,
|
||||||
IndexNotFound,
|
IndexNotFound,
|
||||||
InvalidIndexUid,
|
InvalidIndexUid,
|
||||||
|
InvalidMinWordLengthForTypo,
|
||||||
|
|
||||||
// invalid state error
|
// invalid state error
|
||||||
InvalidState,
|
InvalidState,
|
||||||
@ -271,6 +272,9 @@ impl Code {
|
|||||||
InvalidApiKeyDescription => {
|
InvalidApiKeyDescription => {
|
||||||
ErrCode::invalid("invalid_api_key_description", StatusCode::BAD_REQUEST)
|
ErrCode::invalid("invalid_api_key_description", StatusCode::BAD_REQUEST)
|
||||||
}
|
}
|
||||||
|
InvalidMinWordLengthForTypo => {
|
||||||
|
ErrCode::invalid("invalid_min_word_length_for_typo", StatusCode::BAD_REQUEST)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +41,9 @@ impl ErrorCode for MilliError<'_> {
|
|||||||
UserError::CriterionError(_) => Code::InvalidRankingRule,
|
UserError::CriterionError(_) => Code::InvalidRankingRule,
|
||||||
UserError::InvalidGeoField { .. } => Code::InvalidGeoField,
|
UserError::InvalidGeoField { .. } => Code::InvalidGeoField,
|
||||||
UserError::SortError(_) => Code::Sort,
|
UserError::SortError(_) => Code::Sort,
|
||||||
UserError::InvalidMinTypoWordLenSetting(_, _) => unreachable!(),
|
UserError::InvalidMinTypoWordLenSetting(_, _) => {
|
||||||
|
Code::InvalidMinWordLengthForTypo
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ use crate::EnvSizer;
|
|||||||
|
|
||||||
use super::error::IndexError;
|
use super::error::IndexError;
|
||||||
use super::error::Result;
|
use super::error::Result;
|
||||||
use super::updates::TypoSettings;
|
use super::updates::{MinWordLengthTypoSetting, TypoSettings};
|
||||||
use super::{Checked, Settings};
|
use super::{Checked, Settings};
|
||||||
|
|
||||||
pub type Document = Map<String, Value>;
|
pub type Document = Map<String, Value>;
|
||||||
@ -169,8 +169,14 @@ impl Index {
|
|||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
|
let min_typo_word_len = MinWordLengthTypoSetting {
|
||||||
|
one_typo: Setting::Set(self.min_word_len_one_typo(txn)?),
|
||||||
|
two_typos: Setting::Set(self.min_word_len_two_typos(txn)?),
|
||||||
|
};
|
||||||
|
|
||||||
let typo_tolerance = TypoSettings {
|
let typo_tolerance = TypoSettings {
|
||||||
enabled: Setting::Set(self.authorize_typos(txn)?),
|
enabled: Setting::Set(self.authorize_typos(txn)?),
|
||||||
|
min_word_length_for_typo: Setting::Set(min_typo_word_len),
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(Settings {
|
Ok(Settings {
|
||||||
|
@ -37,14 +37,30 @@ pub struct Checked;
|
|||||||
#[derive(Clone, Default, Debug, Serialize, Deserialize, PartialEq)]
|
#[derive(Clone, Default, Debug, Serialize, Deserialize, PartialEq)]
|
||||||
pub struct Unchecked;
|
pub struct Unchecked;
|
||||||
|
|
||||||
|
#[cfg_attr(test, derive(proptest_derive::Arbitrary))]
|
||||||
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
|
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
|
||||||
#[serde(deny_unknown_fields)]
|
#[serde(deny_unknown_fields)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct MinWordLengthTypoSetting {
|
||||||
|
#[cfg_attr(test, proptest(strategy = "test::setting_strategy()"))]
|
||||||
|
#[serde(default, skip_serializing_if = "Setting::is_not_set")]
|
||||||
|
pub one_typo: Setting<u8>,
|
||||||
|
#[cfg_attr(test, proptest(strategy = "test::setting_strategy()"))]
|
||||||
|
#[serde(default, skip_serializing_if = "Setting::is_not_set")]
|
||||||
|
pub two_typos: Setting<u8>,
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg_attr(test, derive(proptest_derive::Arbitrary))]
|
#[cfg_attr(test, derive(proptest_derive::Arbitrary))]
|
||||||
|
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
|
||||||
|
#[serde(deny_unknown_fields)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct TypoSettings {
|
pub struct TypoSettings {
|
||||||
#[cfg_attr(test, proptest(strategy = "test::setting_strategy()"))]
|
#[cfg_attr(test, proptest(strategy = "test::setting_strategy()"))]
|
||||||
#[serde(default, skip_serializing_if = "Setting::is_not_set")]
|
#[serde(default, skip_serializing_if = "Setting::is_not_set")]
|
||||||
pub enabled: Setting<bool>,
|
pub enabled: Setting<bool>,
|
||||||
|
#[cfg_attr(test, proptest(strategy = "test::setting_strategy()"))]
|
||||||
|
#[serde(default, skip_serializing_if = "Setting::is_not_set")]
|
||||||
|
pub min_word_length_for_typo: Setting<MinWordLengthTypoSetting>,
|
||||||
}
|
}
|
||||||
/// Holds all the settings for an index. `T` can either be `Checked` if they represents settings
|
/// 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
|
/// whose validity is guaranteed, or `Unchecked` if they need to be validated. In the later case, a
|
||||||
@ -352,11 +368,32 @@ pub fn apply_settings_to_builder(
|
|||||||
}
|
}
|
||||||
|
|
||||||
match settings.typo {
|
match settings.typo {
|
||||||
Setting::Set(ref value) => match value.enabled {
|
Setting::Set(ref value) => {
|
||||||
Setting::Set(val) => builder.set_autorize_typos(val),
|
match value.enabled {
|
||||||
Setting::Reset => builder.reset_authorize_typos(),
|
Setting::Set(val) => builder.set_autorize_typos(val),
|
||||||
Setting::NotSet => (),
|
Setting::Reset => builder.reset_authorize_typos(),
|
||||||
},
|
Setting::NotSet => (),
|
||||||
|
}
|
||||||
|
match value.min_word_length_for_typo {
|
||||||
|
Setting::Set(ref setting) => {
|
||||||
|
match setting.one_typo {
|
||||||
|
Setting::Set(val) => builder.set_min_word_len_one_typo(val),
|
||||||
|
Setting::Reset => builder.reset_min_word_len_one_typo(),
|
||||||
|
Setting::NotSet => (),
|
||||||
|
}
|
||||||
|
match setting.two_typos {
|
||||||
|
Setting::Set(val) => builder.set_min_word_len_two_typos(val),
|
||||||
|
Setting::Reset => builder.reset_min_word_len_two_typos(),
|
||||||
|
Setting::NotSet => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Setting::Reset => {
|
||||||
|
builder.reset_min_word_len_one_typo();
|
||||||
|
builder.reset_min_word_len_two_typos();
|
||||||
|
}
|
||||||
|
Setting::NotSet => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
Setting::Reset => {
|
Setting::Reset => {
|
||||||
// all typo settings need to be reset here.
|
// all typo settings need to be reset here.
|
||||||
builder.reset_authorize_typos();
|
builder.reset_authorize_typos();
|
||||||
|
Loading…
Reference in New Issue
Block a user