definitely remove attributes_ranked on settings; auto create it with ranking_rules

This commit is contained in:
Quentin de Quelen 2020-01-19 10:58:16 +01:00 committed by qdequele
parent 036977bfe4
commit 6deb481589
No known key found for this signature in database
GPG Key ID: B3F0A000EBF11745
4 changed files with 24 additions and 35 deletions

View File

@ -973,10 +973,18 @@ mod tests {
let settings = { let settings = {
let data = r#" let data = r#"
{ {
"ranking_rules": [
"_typo",
"_words",
"_proximity",
"_attribute",
"_words_position",
"_exact",
"dsc(release_date)"
],
"attribute_identifier": "id", "attribute_identifier": "id",
"attributes_searchable": ["name", "release_date"], "attributes_searchable": ["name", "release_date"],
"attributes_displayed": ["name", "release_date"], "attributes_displayed": ["name", "release_date"]
"attributes_ranked": ["release_date"]
} }
"#; "#;
let settings: Settings = serde_json::from_str(data).unwrap(); let settings: Settings = serde_json::from_str(data).unwrap();

View File

@ -18,7 +18,6 @@ pub struct Settings {
pub attribute_identifier: Option<String>, pub attribute_identifier: Option<String>,
pub attributes_searchable: Option<Vec<String>>, pub attributes_searchable: Option<Vec<String>>,
pub attributes_displayed: Option<HashSet<String>>, pub attributes_displayed: Option<HashSet<String>>,
pub attributes_ranked: Option<HashSet<String>>,
pub stop_words: Option<BTreeSet<String>>, pub stop_words: Option<BTreeSet<String>>,
pub synonyms: Option<BTreeMap<String, Vec<String>>>, pub synonyms: Option<BTreeMap<String, Vec<String>>>,
} }
@ -60,7 +59,6 @@ impl Into<SettingsUpdate> for Settings {
attribute_identifier: settings.attribute_identifier.into(), attribute_identifier: settings.attribute_identifier.into(),
attributes_searchable: settings.attributes_searchable.into(), attributes_searchable: settings.attributes_searchable.into(),
attributes_displayed: settings.attributes_displayed.into(), attributes_displayed: settings.attributes_displayed.into(),
attributes_ranked: settings.attributes_ranked.into(),
stop_words: settings.stop_words.into(), stop_words: settings.stop_words.into(),
synonyms: settings.synonyms.into(), synonyms: settings.synonyms.into(),
} }
@ -130,6 +128,15 @@ impl ToString for RankingRule {
} }
} }
impl RankingRule {
pub fn get_field(&self) -> Option<String> {
match self {
RankingRule::Asc(field) | RankingRule::Dsc(field) => Some((*field).clone()),
_ => None,
}
}
}
impl FromStr for RankingRule { impl FromStr for RankingRule {
type Err = RankingRuleConversionError; type Err = RankingRuleConversionError;
@ -161,7 +168,6 @@ pub struct SettingsUpdate {
pub attribute_identifier: UpdateState<String>, pub attribute_identifier: UpdateState<String>,
pub attributes_searchable: UpdateState<Vec<String>>, pub attributes_searchable: UpdateState<Vec<String>>,
pub attributes_displayed: UpdateState<HashSet<String>>, pub attributes_displayed: UpdateState<HashSet<String>>,
pub attributes_ranked: UpdateState<HashSet<String>>,
pub stop_words: UpdateState<BTreeSet<String>>, pub stop_words: UpdateState<BTreeSet<String>>,
pub synonyms: UpdateState<BTreeMap<String, Vec<String>>>, pub synonyms: UpdateState<BTreeMap<String, Vec<String>>>,
} }
@ -174,7 +180,6 @@ impl Default for SettingsUpdate {
attribute_identifier: UpdateState::Nothing, attribute_identifier: UpdateState::Nothing,
attributes_searchable: UpdateState::Nothing, attributes_searchable: UpdateState::Nothing,
attributes_displayed: UpdateState::Nothing, attributes_displayed: UpdateState::Nothing,
attributes_ranked: UpdateState::Nothing,
stop_words: UpdateState::Nothing, stop_words: UpdateState::Nothing,
synonyms: UpdateState::Nothing, synonyms: UpdateState::Nothing,
} }

View File

@ -6,7 +6,7 @@ use sdset::SetBuf;
use meilisearch_schema::Schema; use meilisearch_schema::Schema;
use crate::database::{MainT, UpdateT}; use crate::database::{MainT, UpdateT};
use crate::settings::{UpdateState, SettingsUpdate}; use crate::settings::{UpdateState, SettingsUpdate, RankingRule};
use crate::update::documents_addition::reindex_all_documents; use crate::update::documents_addition::reindex_all_documents;
use crate::update::{next_update_id, Update}; use crate::update::{next_update_id, Update};
use crate::{store, MResult, Error}; use crate::{store, MResult, Error};
@ -30,8 +30,6 @@ pub fn apply_settings_update(
index: &store::Index, index: &store::Index,
settings: SettingsUpdate, settings: SettingsUpdate,
) -> MResult<()> { ) -> MResult<()> {
let mut must_reindex = false; let mut must_reindex = false;
let mut schema = match index.main.schema(writer)? { let mut schema = match index.main.schema(writer)? {
@ -46,9 +44,13 @@ pub fn apply_settings_update(
match settings.ranking_rules { match settings.ranking_rules {
UpdateState::Update(v) => { UpdateState::Update(v) => {
let ranked_field: Vec<String> = v.iter().filter_map(RankingRule::get_field).collect();
schema.update_ranked(ranked_field)?;
index.main.put_ranking_rules(writer, v)?; index.main.put_ranking_rules(writer, v)?;
}, },
UpdateState::Clear => { UpdateState::Clear => {
let clear: Vec<String> = Vec::new();
schema.update_ranked(clear)?;
index.main.delete_ranking_rules(writer)?; index.main.delete_ranking_rules(writer)?;
}, },
_ => (), _ => (),
@ -99,25 +101,6 @@ pub fn apply_settings_update(
} }
} }
}; };
match settings.attributes_ranked.clone() {
UpdateState::Update(v) => schema.update_ranked(v)?,
UpdateState::Clear => {
let clear: Vec<String> = Vec::new();
schema.update_ranked(clear)?;
},
UpdateState::Nothing => (),
UpdateState::Add(attrs) => {
for attr in attrs {
schema.set_ranked(attr)?;
}
},
UpdateState::Delete(attrs) => {
for attr in attrs {
schema.remove_ranked(attr);
}
}
};
match settings.attribute_identifier.clone() { match settings.attribute_identifier.clone() {
UpdateState::Update(v) => { UpdateState::Update(v) => {
schema.set_identifier(v)?; schema.set_identifier(v)?;

View File

@ -60,7 +60,6 @@ pub async fn get_all(ctx: Request<Data>) -> SResult<Response> {
let attribute_identifier = schema.clone().map(|s| s.identifier()); let attribute_identifier = schema.clone().map(|s| s.identifier());
let attributes_searchable = schema.clone().map(|s| s.get_indexed_name()); let attributes_searchable = schema.clone().map(|s| s.get_indexed_name());
let attributes_displayed = schema.clone().map(|s| s.get_displayed_name()); let attributes_displayed = schema.clone().map(|s| s.get_displayed_name());
let attributes_ranked = schema.map(|s| s.get_ranked_name());
let settings = Settings { let settings = Settings {
ranking_rules, ranking_rules,
@ -68,7 +67,6 @@ pub async fn get_all(ctx: Request<Data>) -> SResult<Response> {
attribute_identifier, attribute_identifier,
attributes_searchable, attributes_searchable,
attributes_displayed, attributes_displayed,
attributes_ranked,
stop_words, stop_words,
synonyms, synonyms,
}; };
@ -102,7 +100,6 @@ pub async fn delete_all(ctx: Request<Data>) -> SResult<Response> {
attribute_identifier: UpdateState::Clear, attribute_identifier: UpdateState::Clear,
attributes_searchable: UpdateState::Clear, attributes_searchable: UpdateState::Clear,
attributes_displayed: UpdateState::Clear, attributes_displayed: UpdateState::Clear,
attributes_ranked: UpdateState::Clear,
stop_words: UpdateState::Clear, stop_words: UpdateState::Clear,
synonyms: UpdateState::Clear, synonyms: UpdateState::Clear,
}; };
@ -310,7 +307,6 @@ pub struct AttributesSettings {
pub attribute_identifier: Option<String>, pub attribute_identifier: Option<String>,
pub attributes_searchable: Option<Vec<String>>, pub attributes_searchable: Option<Vec<String>>,
pub attributes_displayed: Option<HashSet<String>>, pub attributes_displayed: Option<HashSet<String>>,
pub attributes_ranked: Option<HashSet<String>>,
} }
pub async fn get_attributes(ctx: Request<Data>) -> SResult<Response> { pub async fn get_attributes(ctx: Request<Data>) -> SResult<Response> {
@ -324,13 +320,11 @@ pub async fn get_attributes(ctx: Request<Data>) -> SResult<Response> {
let attribute_identifier = schema.clone().map(|s| s.identifier()); let attribute_identifier = schema.clone().map(|s| s.identifier());
let attributes_searchable = schema.clone().map(|s| s.get_indexed_name()); let attributes_searchable = schema.clone().map(|s| s.get_indexed_name());
let attributes_displayed = schema.clone().map(|s| s.get_displayed_name()); let attributes_displayed = schema.clone().map(|s| s.get_displayed_name());
let attributes_ranked = schema.map(|s| s.get_ranked_name());
let settings = AttributesSettings { let settings = AttributesSettings {
attribute_identifier, attribute_identifier,
attributes_searchable, attributes_searchable,
attributes_displayed, attributes_displayed,
attributes_ranked,
}; };
Ok(tide::Response::new(200).body_json(&settings).unwrap()) Ok(tide::Response::new(200).body_json(&settings).unwrap())
@ -347,7 +341,6 @@ pub async fn update_attributes(mut ctx: Request<Data>) -> SResult<Response> {
attribute_identifier: settings.attribute_identifier, attribute_identifier: settings.attribute_identifier,
attributes_searchable: settings.attributes_searchable, attributes_searchable: settings.attributes_searchable,
attributes_displayed: settings.attributes_displayed, attributes_displayed: settings.attributes_displayed,
attributes_ranked: settings.attributes_ranked,
.. Settings::default() .. Settings::default()
}; };