mirror of
https://github.com/meilisearch/MeiliSearch
synced 2025-07-02 19:40:52 +02:00
Add the overrideSettings parameter
This commit is contained in:
parent
f4bb6cbca8
commit
efd5fd96cc
4 changed files with 65 additions and 28 deletions
|
@ -59,15 +59,29 @@ impl IndexScheduler {
|
||||||
indexes.len() as u32,
|
indexes.len() as u32,
|
||||||
));
|
));
|
||||||
|
|
||||||
let ExportIndexSettings { filter } = export_settings;
|
let ExportIndexSettings { filter, override_settings } = export_settings;
|
||||||
let index = self.index(uid)?;
|
let index = self.index(uid)?;
|
||||||
let index_rtxn = index.read_txn()?;
|
let index_rtxn = index.read_txn()?;
|
||||||
|
|
||||||
// Send the primary key
|
let url = format!("{base_url}/indexes/{uid}");
|
||||||
|
|
||||||
|
// First, check if the index already exists
|
||||||
|
let response = retry(&must_stop_processing, || {
|
||||||
|
let mut request = agent.get(&url);
|
||||||
|
if let Some(api_key) = api_key {
|
||||||
|
request = request.set("Authorization", &format!("Bearer {api_key}"));
|
||||||
|
}
|
||||||
|
|
||||||
|
request.send_string("").map_err(into_backoff_error)
|
||||||
|
})?;
|
||||||
|
let already_existed = response.status() == 200;
|
||||||
|
|
||||||
let primary_key = index
|
let primary_key = index
|
||||||
.primary_key(&index_rtxn)
|
.primary_key(&index_rtxn)
|
||||||
.map_err(|e| Error::from_milli(e.into(), Some(uid.to_string())))?;
|
.map_err(|e| Error::from_milli(e.into(), Some(uid.to_string())))?;
|
||||||
|
|
||||||
|
// Create the index
|
||||||
|
if !already_existed {
|
||||||
let url = format!("{base_url}/indexes");
|
let url = format!("{base_url}/indexes");
|
||||||
retry(&must_stop_processing, || {
|
retry(&must_stop_processing, || {
|
||||||
let mut request = agent.post(&url);
|
let mut request = agent.post(&url);
|
||||||
|
@ -77,9 +91,25 @@ impl IndexScheduler {
|
||||||
let index_param = json!({ "uid": uid, "primaryKey": primary_key });
|
let index_param = json!({ "uid": uid, "primaryKey": primary_key });
|
||||||
request.send_json(&index_param).map_err(into_backoff_error)
|
request.send_json(&index_param).map_err(into_backoff_error)
|
||||||
})?;
|
})?;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Patch the index primary key
|
||||||
|
if already_existed && *override_settings {
|
||||||
|
let url = format!("{base_url}/indexes/{uid}");
|
||||||
|
retry(&must_stop_processing, || {
|
||||||
|
let mut request = agent.patch(&url);
|
||||||
|
if let Some(api_key) = api_key {
|
||||||
|
request = request.set("Authorization", &format!("Bearer {api_key}"));
|
||||||
|
}
|
||||||
|
let index_param = json!({ "primaryKey": primary_key });
|
||||||
|
request.send_json(&index_param).map_err(into_backoff_error)
|
||||||
|
})?;
|
||||||
|
}
|
||||||
|
|
||||||
// Send the index settings
|
// Send the index settings
|
||||||
let mut settings = settings::settings(&index, &index_rtxn, SecretPolicy::RevealSecrets)
|
if !already_existed || *override_settings {
|
||||||
|
let mut settings =
|
||||||
|
settings::settings(&index, &index_rtxn, SecretPolicy::RevealSecrets)
|
||||||
.map_err(|e| Error::from_milli(e, Some(uid.to_string())))?;
|
.map_err(|e| Error::from_milli(e, Some(uid.to_string())))?;
|
||||||
// Remove the experimental chat setting if not enabled
|
// Remove the experimental chat setting if not enabled
|
||||||
if self.features().check_chat_completions("exporting chat settings").is_err() {
|
if self.features().check_chat_completions("exporting chat settings").is_err() {
|
||||||
|
@ -95,6 +125,7 @@ impl IndexScheduler {
|
||||||
}
|
}
|
||||||
request.send_json(settings.clone()).map_err(into_backoff_error)
|
request.send_json(settings.clone()).map_err(into_backoff_error)
|
||||||
})?;
|
})?;
|
||||||
|
}
|
||||||
|
|
||||||
let filter = filter
|
let filter = filter
|
||||||
.as_ref()
|
.as_ref()
|
||||||
|
|
|
@ -395,6 +395,7 @@ InvalidExportApiKey , InvalidRequest , BAD_REQU
|
||||||
InvalidExportPayloadSize , InvalidRequest , BAD_REQUEST ;
|
InvalidExportPayloadSize , InvalidRequest , BAD_REQUEST ;
|
||||||
InvalidExportIndexesPatterns , InvalidRequest , BAD_REQUEST ;
|
InvalidExportIndexesPatterns , InvalidRequest , BAD_REQUEST ;
|
||||||
InvalidExportIndexFilter , InvalidRequest , BAD_REQUEST ;
|
InvalidExportIndexFilter , InvalidRequest , BAD_REQUEST ;
|
||||||
|
InvalidExportIndexOverrideSettings , InvalidRequest , BAD_REQUEST ;
|
||||||
// Experimental features - Chat Completions
|
// Experimental features - Chat Completions
|
||||||
UnimplementedExternalFunctionCalling , InvalidRequest , NOT_IMPLEMENTED ;
|
UnimplementedExternalFunctionCalling , InvalidRequest , NOT_IMPLEMENTED ;
|
||||||
UnimplementedNonStreamingChatCompletions , InvalidRequest , NOT_IMPLEMENTED ;
|
UnimplementedNonStreamingChatCompletions , InvalidRequest , NOT_IMPLEMENTED ;
|
||||||
|
|
|
@ -178,6 +178,7 @@ pub struct IndexSwap {
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct ExportIndexSettings {
|
pub struct ExportIndexSettings {
|
||||||
pub filter: Option<Value>,
|
pub filter: Option<Value>,
|
||||||
|
pub override_settings: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl KindWithContent {
|
impl KindWithContent {
|
||||||
|
|
|
@ -84,8 +84,8 @@ async fn export(
|
||||||
let indexes = match indexes {
|
let indexes = match indexes {
|
||||||
Some(indexes) => indexes
|
Some(indexes) => indexes
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(pattern, ExportIndexSettings { filter })| {
|
.map(|(pattern, ExportIndexSettings { filter, override_settings })| {
|
||||||
(pattern, DbExportIndexSettings { filter })
|
(pattern, DbExportIndexSettings { filter, override_settings })
|
||||||
})
|
})
|
||||||
.collect(),
|
.collect(),
|
||||||
None => BTreeMap::from([(
|
None => BTreeMap::from([(
|
||||||
|
@ -179,4 +179,8 @@ pub struct ExportIndexSettings {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
#[deserr(default, error = DeserrJsonError<InvalidExportIndexFilter>)]
|
#[deserr(default, error = DeserrJsonError<InvalidExportIndexFilter>)]
|
||||||
pub filter: Option<Value>,
|
pub filter: Option<Value>,
|
||||||
|
#[schema(value_type = Option<bool>, example = json!(true))]
|
||||||
|
#[serde(default)]
|
||||||
|
#[deserr(default, error = DeserrJsonError<InvalidExportIndexOverrideSettings>)]
|
||||||
|
pub override_settings: bool,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue