push a first implementation of the stop_words

This commit is contained in:
tamo 2021-04-06 15:41:03 +02:00
parent 2206a44baf
commit 40ef9a3c6a
No known key found for this signature in database
GPG key ID: 20CD8020AFA88D69
6 changed files with 66 additions and 15 deletions

View file

@ -42,7 +42,7 @@ main_error = "0.1.0"
meilisearch-error = { path = "../meilisearch-error" }
meilisearch-tokenizer = { git = "https://github.com/meilisearch/Tokenizer.git", branch = "main" }
memmap = "0.7.0"
milli = { git = "https://github.com/meilisearch/milli.git", rev = "b7b23cd" }
milli = { git = "https://github.com/meilisearch/milli.git", rev = "2bcdd8844c4ec9f6f8a34617ea0e4321fa633c0c" }
mime = "0.3.16"
once_cell = "1.5.2"
parking_lot = "0.11.1"

View file

@ -1,7 +1,7 @@
mod search;
mod updates;
use std::collections::HashSet;
use std::collections::{BTreeSet, HashSet};
use std::ops::Deref;
use std::sync::Arc;
@ -51,11 +51,24 @@ impl Index {
.map(|c| c.to_string())
.collect();
let stop_words = self
.stop_words(&txn)?
.map(|stop_words| -> anyhow::Result<BTreeSet<_>> {
Ok(stop_words
.stream()
.into_strs()?
.into_iter()
.collect())
})
.transpose()?
.unwrap_or_else(BTreeSet::new);
Ok(Settings {
displayed_attributes: Some(Some(displayed_attributes)),
searchable_attributes: Some(Some(searchable_attributes)),
attributes_for_faceting: Some(Some(faceted_attributes)),
ranking_rules: Some(Some(criteria)),
stop_words: Some(Some(stop_words)),
})
}

View file

@ -1,4 +1,4 @@
use std::collections::HashMap;
use std::collections::{BTreeSet, HashMap};
use std::io;
use std::num::NonZeroUsize;
@ -44,8 +44,12 @@ pub struct Settings {
)]
pub ranking_rules: Option<Option<Vec<String>>>,
// TODO we are missing the stopWords, synonyms and distinctAttribute for the GET settings
// request
#[serde(
default,
deserialize_with = "deserialize_some",
skip_serializing_if = "Option::is_none"
)]
pub stop_words: Option<Option<BTreeSet<String>>>,
}
impl Settings {
@ -55,6 +59,7 @@ impl Settings {
searchable_attributes: Some(None),
attributes_for_faceting: Some(None),
ranking_rules: Some(None),
stop_words: Some(None),
}
}
}
@ -170,6 +175,14 @@ impl Index {
}
}
// We transpose the settings JSON struct into a real setting update.
if let Some(ref stop_words) = settings.stop_words {
match stop_words {
Some(stop_words) => builder.set_stop_words(stop_words.clone()),
_ => builder.reset_stop_words(),
}
}
let result = builder
.execute(|indexing_step, update_id| info!("update {}: {:?}", update_id, indexing_step));

View file

@ -91,6 +91,12 @@ make_setting_route!(
searchable_attributes
);
make_setting_route!(
"/indexes/{index_uid}/settings/stop-words",
std::collections::BTreeSet<String>,
stop_words
);
//make_setting_route!(
//"/indexes/{index_uid}/settings/distinct-attribute",
//String,
@ -122,7 +128,8 @@ macro_rules! create_services {
create_services!(
attributes_for_faceting,
displayed_attributes,
searchable_attributes
searchable_attributes,
stop_words
);
#[post("/indexes/{index_uid}/settings", wrap = "Authentication::Private")]

View file

@ -16,21 +16,21 @@ async fn get_settings() {
let (response, code) = index.settings().await;
assert_eq!(code, 200);
let settings = response.as_object().unwrap();
assert_eq!(settings.keys().len(), 4);
assert_eq!(settings.keys().len(), 5);
assert_eq!(settings["displayedAttributes"], json!(["*"]));
assert_eq!(settings["searchableAttributes"], json!(["*"]));
assert_eq!(settings["attributesForFaceting"], json!({}));
assert_eq!(
settings["rankingRules"],
json!([
"typo",
"words",
"typo",
"proximity",
"attribute",
"wordsPosition",
"exactness"
])
);
assert_eq!(settings["stopWords"], json!(null));
}
#[actix_rt::test]