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 data = r#"
{
"ranking_rules": [
"_typo",
"_words",
"_proximity",
"_attribute",
"_words_position",
"_exact",
"dsc(release_date)"
],
"attribute_identifier": "id",
"attributes_searchable": ["name", "release_date"],
"attributes_displayed": ["name", "release_date"],
"attributes_ranked": ["release_date"]
"attributes_displayed": ["name", "release_date"]
}
"#;
let settings: Settings = serde_json::from_str(data).unwrap();

View File

@ -18,7 +18,6 @@ pub struct Settings {
pub attribute_identifier: Option<String>,
pub attributes_searchable: Option<Vec<String>>,
pub attributes_displayed: Option<HashSet<String>>,
pub attributes_ranked: Option<HashSet<String>>,
pub stop_words: Option<BTreeSet<String>>,
pub synonyms: Option<BTreeMap<String, Vec<String>>>,
}
@ -60,7 +59,6 @@ impl Into<SettingsUpdate> for Settings {
attribute_identifier: settings.attribute_identifier.into(),
attributes_searchable: settings.attributes_searchable.into(),
attributes_displayed: settings.attributes_displayed.into(),
attributes_ranked: settings.attributes_ranked.into(),
stop_words: settings.stop_words.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 {
type Err = RankingRuleConversionError;
@ -161,7 +168,6 @@ pub struct SettingsUpdate {
pub attribute_identifier: UpdateState<String>,
pub attributes_searchable: UpdateState<Vec<String>>,
pub attributes_displayed: UpdateState<HashSet<String>>,
pub attributes_ranked: UpdateState<HashSet<String>>,
pub stop_words: UpdateState<BTreeSet<String>>,
pub synonyms: UpdateState<BTreeMap<String, Vec<String>>>,
}
@ -174,7 +180,6 @@ impl Default for SettingsUpdate {
attribute_identifier: UpdateState::Nothing,
attributes_searchable: UpdateState::Nothing,
attributes_displayed: UpdateState::Nothing,
attributes_ranked: UpdateState::Nothing,
stop_words: UpdateState::Nothing,
synonyms: UpdateState::Nothing,
}

View File

@ -6,7 +6,7 @@ use sdset::SetBuf;
use meilisearch_schema::Schema;
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::{next_update_id, Update};
use crate::{store, MResult, Error};
@ -30,8 +30,6 @@ pub fn apply_settings_update(
index: &store::Index,
settings: SettingsUpdate,
) -> MResult<()> {
let mut must_reindex = false;
let mut schema = match index.main.schema(writer)? {
@ -46,9 +44,13 @@ pub fn apply_settings_update(
match settings.ranking_rules {
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)?;
},
UpdateState::Clear => {
let clear: Vec<String> = Vec::new();
schema.update_ranked(clear)?;
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() {
UpdateState::Update(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 attributes_searchable = schema.clone().map(|s| s.get_indexed_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 {
ranking_rules,
@ -68,7 +67,6 @@ pub async fn get_all(ctx: Request<Data>) -> SResult<Response> {
attribute_identifier,
attributes_searchable,
attributes_displayed,
attributes_ranked,
stop_words,
synonyms,
};
@ -102,7 +100,6 @@ pub async fn delete_all(ctx: Request<Data>) -> SResult<Response> {
attribute_identifier: UpdateState::Clear,
attributes_searchable: UpdateState::Clear,
attributes_displayed: UpdateState::Clear,
attributes_ranked: UpdateState::Clear,
stop_words: UpdateState::Clear,
synonyms: UpdateState::Clear,
};
@ -310,7 +307,6 @@ pub struct AttributesSettings {
pub attribute_identifier: Option<String>,
pub attributes_searchable: Option<Vec<String>>,
pub attributes_displayed: Option<HashSet<String>>,
pub attributes_ranked: Option<HashSet<String>>,
}
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 attributes_searchable = schema.clone().map(|s| s.get_indexed_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 {
attribute_identifier,
attributes_searchable,
attributes_displayed,
attributes_ranked,
};
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,
attributes_searchable: settings.attributes_searchable,
attributes_displayed: settings.attributes_displayed,
attributes_ranked: settings.attributes_ranked,
.. Settings::default()
};