From 3dd4f0587dbad8bad7ccf3d7ac8c9722edb57905 Mon Sep 17 00:00:00 2001 From: Tamo Date: Tue, 15 Jul 2025 23:14:48 +0200 Subject: [PATCH] add a few helpers --- crates/meilisearch-types/src/error.rs | 4 +++- crates/milli/src/constants.rs | 1 + crates/milli/src/error.rs | 4 ++++ crates/milli/src/filterable_attributes_rules.rs | 6 +++++- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/crates/meilisearch-types/src/error.rs b/crates/meilisearch-types/src/error.rs index c57e2d042..cc651950c 100644 --- a/crates/meilisearch-types/src/error.rs +++ b/crates/meilisearch-types/src/error.rs @@ -484,7 +484,9 @@ impl ErrorCode for milli::Error { Code::InvalidFacetSearchFacetName } UserError::CriterionError(_) => Code::InvalidSettingsRankingRules, - UserError::InvalidGeoField { .. } => Code::InvalidDocumentGeoField, + UserError::InvalidGeoField { .. } | UserError::GeoJsonError(_) => { + Code::InvalidDocumentGeoField + } UserError::InvalidVectorDimensions { .. } | UserError::InvalidIndexingVectorDimensions { .. } => { Code::InvalidVectorDimensions diff --git a/crates/milli/src/constants.rs b/crates/milli/src/constants.rs index dc88bdb37..af3bcf160 100644 --- a/crates/milli/src/constants.rs +++ b/crates/milli/src/constants.rs @@ -11,3 +11,4 @@ const fn parse_u32(s: &str) -> u32 { pub const RESERVED_VECTORS_FIELD_NAME: &str = "_vectors"; pub const RESERVED_GEO_FIELD_NAME: &str = "_geo"; +pub const RESERVED_GEOJSON_FIELD_NAME: &str = "_geojson"; diff --git a/crates/milli/src/error.rs b/crates/milli/src/error.rs index f8886da8e..6ab1e5b9c 100644 --- a/crates/milli/src/error.rs +++ b/crates/milli/src/error.rs @@ -78,6 +78,8 @@ pub enum InternalError { #[error(transparent)] ArroyError(#[from] arroy::Error), #[error(transparent)] + CelluliteError(#[from] cellulite::Error), + #[error(transparent)] VectorEmbeddingError(#[from] crate::vector::Error), } @@ -151,6 +153,8 @@ and can not be more than 511 bytes.", .document_id.to_string() }, #[error(transparent)] InvalidGeoField(#[from] Box), + #[error(transparent)] + GeoJsonError(#[from] geojson::Error), #[error("Invalid vector dimensions: expected: `{}`, found: `{}`.", .expected, .found)] InvalidVectorDimensions { expected: usize, found: usize }, #[error("Invalid vector dimensions in document with id `{document_id}` in `._vectors.{embedder_name}`.\n - note: embedding #{embedding_index} has dimensions {found}\n - note: embedder `{embedder_name}` requires {expected}")] diff --git a/crates/milli/src/filterable_attributes_rules.rs b/crates/milli/src/filterable_attributes_rules.rs index ae1a9755a..b48c55770 100644 --- a/crates/milli/src/filterable_attributes_rules.rs +++ b/crates/milli/src/filterable_attributes_rules.rs @@ -5,7 +5,7 @@ use serde::{Deserialize, Serialize}; use utoipa::ToSchema; use crate::attribute_patterns::{match_distinct_field, match_field_legacy, PatternMatch}; -use crate::constants::RESERVED_GEO_FIELD_NAME; +use crate::constants::{RESERVED_GEOJSON_FIELD_NAME, RESERVED_GEO_FIELD_NAME}; use crate::AttributePatterns; #[derive(Serialize, Deserialize, PartialEq, Eq, Clone, Debug, ToSchema)] @@ -34,6 +34,10 @@ impl FilterableAttributesRule { matches!(self, FilterableAttributesRule::Field(field_name) if field_name == RESERVED_GEO_FIELD_NAME) } + pub fn has_geojson(&self) -> bool { + matches!(self, FilterableAttributesRule::Field(field_name) if field_name == RESERVED_GEOJSON_FIELD_NAME) + } + /// Get the features of the rule. pub fn features(&self) -> FilterableAttributesFeatures { match self {