From 56ae029fa5d7d38af4b868f646fde56bf459f0fb Mon Sep 17 00:00:00 2001 From: Tamo Date: Tue, 15 Jul 2025 23:14:06 +0200 Subject: [PATCH] add cellulite to the index --- crates/milli/Cargo.toml | 2 ++ crates/milli/src/index.rs | 14 ++++++++++++++ crates/milli/src/lib.rs | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/crates/milli/Cargo.toml b/crates/milli/Cargo.toml index a76deea67..a5dcbad89 100644 --- a/crates/milli/Cargo.toml +++ b/crates/milli/Cargo.toml @@ -19,6 +19,7 @@ bstr = "1.12.0" bytemuck = { version = "1.23.1", features = ["extern_crate_alloc"] } byteorder = "1.5.0" charabia = { version = "0.9.7", default-features = false } +cellulite = { git = "https://github.com/irevoire/cellulite", branch = "main"} concat-arrays = "0.1.2" convert_case = "0.8.0" crossbeam-channel = "0.5.15" @@ -27,6 +28,7 @@ either = { version = "1.15.0", features = ["serde"] } flatten-serde-json = { path = "../flatten-serde-json" } fst = "0.4.7" fxhash = "0.2.1" +geojson = "0.24.2" geoutils = "0.5.1" grenad = { version = "0.5.0", default-features = false, features = [ "rayon", diff --git a/crates/milli/src/index.rs b/crates/milli/src/index.rs index 4f018e56f..e4d02a613 100644 --- a/crates/milli/src/index.rs +++ b/crates/milli/src/index.rs @@ -115,6 +115,7 @@ pub mod db_name { pub const FIELD_ID_DOCID_FACET_STRINGS: &str = "field-id-docid-facet-strings"; pub const VECTOR_EMBEDDER_CATEGORY_ID: &str = "vector-embedder-category-id"; pub const VECTOR_STORE: &str = "vector-arroy"; + pub const CELLULITE: &str = "cellulite"; pub const DOCUMENTS: &str = "documents"; } const NUMBER_OF_DBS: u32 = 25; @@ -183,6 +184,9 @@ pub struct Index { /// Vector store based on hannoy™. pub vector_store: hannoy::Database, + /// Geo store based on cellulite™. + pub cellulite: cellulite::Database, + /// Maps the document id to the document as an obkv store. pub(crate) documents: Database, } @@ -239,6 +243,7 @@ impl Index { let embedder_category_id = env.create_database(&mut wtxn, Some(VECTOR_EMBEDDER_CATEGORY_ID))?; let vector_store = env.create_database(&mut wtxn, Some(VECTOR_STORE))?; + let cellulite = env.create_database(&mut wtxn, Some(CELLULITE))?; let documents = env.create_database(&mut wtxn, Some(DOCUMENTS))?; @@ -267,6 +272,7 @@ impl Index { field_id_docid_facet_strings, vector_store, embedder_category_id, + cellulite, documents, }; if this.get_version(&wtxn)?.is_none() && creation { @@ -1052,6 +1058,13 @@ impl Index { Ok(geo_filter) } + /// Returns true if the geo sorting feature is enabled. + pub fn is_geojson_enabled(&self, rtxn: &RoTxn<'_>) -> Result { + let geojson_filter = + self.filterable_attributes_rules(rtxn)?.iter().any(|field| field.has_geojson()); + Ok(geojson_filter) + } + pub fn asc_desc_fields(&self, rtxn: &RoTxn<'_>) -> Result> { let asc_desc_fields = self .criteria(rtxn)? @@ -1882,6 +1895,7 @@ impl Index { field_id_docid_facet_strings, vector_store, embedder_category_id, + cellulite: _, documents, } = self; diff --git a/crates/milli/src/lib.rs b/crates/milli/src/lib.rs index afe253b85..9def99b84 100644 --- a/crates/milli/src/lib.rs +++ b/crates/milli/src/lib.rs @@ -87,7 +87,7 @@ pub use self::search::{ }; pub use self::update::ChannelCongestion; -pub type Result = std::result::Result; +pub type Result = std::result::Result; pub type Attribute = u32; pub type BEU16 = heed::types::U16;