mirror of
https://github.com/meilisearch/MeiliSearch
synced 2025-07-03 20:07:09 +02:00
Merge #135
135: Add stop words r=curquiza a=irevoire closes #21 Co-authored-by: tamo <tamo@meilisearch.com>
This commit is contained in:
commit
f881e8691e
10 changed files with 71 additions and 152 deletions
|
@ -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)),
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
||||
|
|
|
@ -1,43 +0,0 @@
|
|||
use actix_web::{web, HttpResponse, get};
|
||||
|
||||
use crate::error::{Error, ResponseError};
|
||||
use crate::helpers::Authentication;
|
||||
use crate::make_update_delete_routes;
|
||||
use crate::Data;
|
||||
|
||||
#[get(
|
||||
"/indexes/{index_uid}/settings/attributes-for-faceting",
|
||||
wrap = "Authentication::Private"
|
||||
)]
|
||||
async fn get(
|
||||
data: web::Data<Data>,
|
||||
index_uid: web::Path<String>,
|
||||
) -> Result<HttpResponse, ResponseError> {
|
||||
let index = data
|
||||
.db
|
||||
.load()
|
||||
.open_index(&index_uid.as_ref())
|
||||
.ok_or(Error::index_not_found(&index_uid.as_ref()))?;
|
||||
|
||||
let attributes_for_faceting = data.db.load().main_read::<_, _, ResponseError>(|reader| {
|
||||
let schema = index.main.schema(reader)?;
|
||||
let attrs = index.main.attributes_for_faceting(reader)?;
|
||||
let attr_names = match (&schema, &attrs) {
|
||||
(Some(schema), Some(attrs)) => attrs
|
||||
.iter()
|
||||
.filter_map(|&id| schema.name(id))
|
||||
.map(str::to_string)
|
||||
.collect(),
|
||||
_ => vec![],
|
||||
};
|
||||
Ok(attr_names)
|
||||
})?;
|
||||
|
||||
Ok(HttpResponse::Ok().json(attributes_for_faceting))
|
||||
}
|
||||
|
||||
make_update_delete_routes!(
|
||||
"/indexes/{index_uid}/settings/attributes-for-faceting",
|
||||
Vec<String>,
|
||||
attributes_for_faceting
|
||||
);
|
|
@ -1,25 +0,0 @@
|
|||
use std::collections::HashSet;
|
||||
|
||||
use actix_web::{web, HttpResponse, get};
|
||||
|
||||
use crate::error::{Error, ResponseError};
|
||||
use crate::helpers::Authentication;
|
||||
use crate::make_update_delete_routes;
|
||||
use crate::Data;
|
||||
|
||||
#[get(
|
||||
"/indexes/{index_uid}/settings/displayed-attributes",
|
||||
wrap = "Authentication::Private"
|
||||
)]
|
||||
async fn get(
|
||||
data: web::Data<Data>,
|
||||
index_uid: web::Path<String>,
|
||||
) -> Result<HttpResponse, ResponseError> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
make_update_delete_routes!(
|
||||
"/indexes/{index_uid}/settings/displayed-attributes",
|
||||
HashSet<String>,
|
||||
displayed_attributes
|
||||
);
|
|
@ -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")]
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
use actix_web::{web, HttpResponse, get};
|
||||
|
||||
use crate::data::get_indexed_attributes;
|
||||
use crate::error::{Error, ResponseError};
|
||||
use crate::helpers::Authentication;
|
||||
use crate::make_update_delete_routes;
|
||||
use crate::Data;
|
||||
|
||||
#[get(
|
||||
"/indexes/{index_uid}/settings/searchable-attributes",
|
||||
wrap = "Authentication::Private"
|
||||
)]
|
||||
async fn get(
|
||||
data: web::Data<Data>,
|
||||
index_uid: web::Path<String>,
|
||||
) -> Result<HttpResponse, ResponseError> {
|
||||
let index = data
|
||||
.db
|
||||
.load()
|
||||
.open_index(&index_uid.as_ref())
|
||||
|
||||
.ok_or(Error::index_not_found(&index_uid.as_ref()))?;
|
||||
let reader = data.db.load().main_read_txn()?;
|
||||
let schema = index.main.schema(&reader)?;
|
||||
let searchable_attributes: Option<Vec<String>> = schema.as_ref().map(get_indexed_attributes);
|
||||
|
||||
Ok(HttpResponse::Ok().json(searchable_attributes))
|
||||
}
|
||||
|
||||
make_update_delete_routes!(
|
||||
"/indexes/{index_uid}/settings/searchable-attributes",
|
||||
Vec<String>,
|
||||
searchable_attributes
|
||||
);
|
|
@ -1,33 +0,0 @@
|
|||
use std::collections::BTreeSet;
|
||||
|
||||
use crate::make_update_delete_routes;
|
||||
use actix_web::{web, HttpResponse, get};
|
||||
|
||||
use crate::error::{Error, ResponseError};
|
||||
use crate::helpers::Authentication;
|
||||
use crate::Data;
|
||||
|
||||
#[get(
|
||||
"/indexes/{index_uid}/settings/stop-words",
|
||||
wrap = "Authentication::Private"
|
||||
)]
|
||||
async fn get(
|
||||
data: web::Data<Data>,
|
||||
index_uid: web::Path<String>,
|
||||
) -> Result<HttpResponse, ResponseError> {
|
||||
let index = data
|
||||
.db
|
||||
.load()
|
||||
.open_index(&index_uid.as_ref())
|
||||
.ok_or(Error::index_not_found(&index_uid.as_ref()))?;
|
||||
let reader = data.db.load().main_read_txn()?;
|
||||
let stop_words = index.main.stop_words(&reader)?;
|
||||
|
||||
Ok(HttpResponse::Ok().json(stop_words))
|
||||
}
|
||||
|
||||
make_update_delete_routes!(
|
||||
"/indexes/{index_uid}/settings/stop-words",
|
||||
BTreeSet<String>,
|
||||
stop_words
|
||||
);
|
Loading…
Add table
Add a link
Reference in a new issue