mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-22 21:04:27 +01:00
Change the format of custom ranking rules when importing v1 dumps
This commit is contained in:
parent
33514b28be
commit
331d28102f
@ -138,6 +138,20 @@ fn load_index(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Parses the v1 version of the Asc ranking rules `asc(price)`and returns the field name.
|
||||||
|
fn asc_ranking_rule(text: &str) -> Option<&str> {
|
||||||
|
text.split_once("asc(")
|
||||||
|
.and_then(|(_, tail)| tail.rsplit_once(")"))
|
||||||
|
.map(|(field, _)| field)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Parses the v1 version of the Desc ranking rules `asc(price)`and returns the field name.
|
||||||
|
fn desc_ranking_rule(text: &str) -> Option<&str> {
|
||||||
|
text.split_once("desc(")
|
||||||
|
.and_then(|(_, tail)| tail.rsplit_once(")"))
|
||||||
|
.map(|(field, _)| field)
|
||||||
|
}
|
||||||
|
|
||||||
/// we need to **always** be able to convert the old settings to the settings currently being used
|
/// we need to **always** be able to convert the old settings to the settings currently being used
|
||||||
impl From<Settings> for index_controller::Settings<Unchecked> {
|
impl From<Settings> for index_controller::Settings<Unchecked> {
|
||||||
fn from(settings: Settings) -> Self {
|
fn from(settings: Settings) -> Self {
|
||||||
@ -164,19 +178,21 @@ impl From<Settings> for index_controller::Settings<Unchecked> {
|
|||||||
None => Setting::NotSet
|
None => Setting::NotSet
|
||||||
},
|
},
|
||||||
sortable_attributes: Setting::NotSet,
|
sortable_attributes: Setting::NotSet,
|
||||||
// we need to convert the old `Vec<String>` into a `BTreeSet<String>`
|
|
||||||
ranking_rules: match settings.ranking_rules {
|
ranking_rules: match settings.ranking_rules {
|
||||||
Some(Some(ranking_rules)) => Setting::Set(ranking_rules.into_iter().filter(|criterion| {
|
Some(Some(ranking_rules)) => Setting::Set(ranking_rules.into_iter().filter_map(|criterion| {
|
||||||
match criterion.as_str() {
|
match criterion.as_str() {
|
||||||
"words" | "typo" | "proximity" | "attribute" | "exactness" => true,
|
"words" | "typo" | "proximity" | "attribute" | "exactness" => Some(criterion),
|
||||||
s if s.starts_with("asc") || s.starts_with("desc") => true,
|
s if s.starts_with("asc") => asc_ranking_rule(s).map(|f| format!("{}:asc", f)),
|
||||||
|
s if s.starts_with("desc") => desc_ranking_rule(s).map(|f| format!("{}:desc", f)),
|
||||||
"wordsPosition" => {
|
"wordsPosition" => {
|
||||||
warn!("The criteria `attribute` and `wordsPosition` have been merged into a single criterion `attribute` so `wordsPositon` will be ignored");
|
warn!("The criteria `attribute` and `wordsPosition` have been merged \
|
||||||
false
|
into a single criterion `attribute` so `wordsPositon` will be \
|
||||||
|
ignored");
|
||||||
|
None
|
||||||
}
|
}
|
||||||
s => {
|
s => {
|
||||||
error!("Unknown criterion found in the dump: `{}`, it will be ignored", s);
|
error!("Unknown criterion found in the dump: `{}`, it will be ignored", s);
|
||||||
false
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).collect()),
|
}).collect()),
|
||||||
|
Loading…
Reference in New Issue
Block a user