Support JSON value as filters

This commit is contained in:
Clément Renault 2025-06-16 15:56:26 +02:00 committed by Kerollmops
parent 3329248a84
commit ee812b31c4
No known key found for this signature in database
GPG key ID: F250A4C4E3AE5F5F
3 changed files with 8 additions and 7 deletions

View file

@ -90,10 +90,9 @@ impl IndexScheduler {
request.send_json(settings.clone()).map_err(into_backoff_error)
})?;
// TODO support JSON Value objects
let filter = filter
.as_deref()
.map(Filter::from_str)
.as_ref()
.map(Filter::from_json)
.transpose()
.map_err(|e| Error::from_milli(e, Some(uid.to_string())))?
.flatten();

View file

@ -8,6 +8,7 @@ use milli::update::IndexDocumentsMethod;
use milli::Object;
use roaring::RoaringBitmap;
use serde::{Deserialize, Serialize, Serializer};
use serde_json::Value;
use time::{Duration, OffsetDateTime};
use utoipa::{schema, ToSchema};
use uuid::Uuid;
@ -111,11 +112,11 @@ pub enum KindWithContent {
},
DocumentDeletionByFilter {
index_uid: String,
filter_expr: serde_json::Value,
filter_expr: Value,
},
DocumentEdition {
index_uid: String,
filter_expr: Option<serde_json::Value>,
filter_expr: Option<Value>,
context: Option<milli::Object>,
function: String,
},
@ -174,7 +175,7 @@ pub struct IndexSwap {
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "camelCase")]
pub struct ExportIndexSettings {
pub filter: Option<String>,
pub filter: Option<Value>,
}
impl KindWithContent {

View file

@ -12,6 +12,7 @@ use meilisearch_types::index_uid_pattern::IndexUidPattern;
use meilisearch_types::keys::actions;
use meilisearch_types::tasks::{ExportIndexSettings as DbExportIndexSettings, KindWithContent};
use serde::Serialize;
use serde_json::Value;
use tracing::debug;
use utoipa::{OpenApi, ToSchema};
@ -122,5 +123,5 @@ pub struct ExportIndexSettings {
#[schema(value_type = Option<String>, example = json!("genres = action"))]
#[serde(default)]
#[deserr(default, error = DeserrJsonError<InvalidExportIndexFilter>)]
pub filter: Option<String>,
pub filter: Option<Value>,
}