diff --git a/crates/meilisearch-types/src/settings.rs b/crates/meilisearch-types/src/settings.rs index e1d314b8f..f73a66c4b 100644 --- a/crates/meilisearch-types/src/settings.rs +++ b/crates/meilisearch-types/src/settings.rs @@ -989,7 +989,10 @@ pub fn settings( facet_search: Setting::Set(facet_search), prefix_search: Setting::Set(prefix_search.unwrap_or_default()), chat: Setting::Set(chat), - vector_store: Setting::Set(vector_store), + vector_store: match vector_store { + Some(vector_store) => Setting::Set(vector_store), + None => Setting::Reset, + }, _kind: PhantomData, }; diff --git a/crates/milli/src/index.rs b/crates/milli/src/index.rs index 54086d8a5..4f018e56f 100644 --- a/crates/milli/src/index.rs +++ b/crates/milli/src/index.rs @@ -469,12 +469,11 @@ impl Index { )?) } - pub fn get_vector_store(&self, rtxn: &RoTxn<'_>) -> Result { + pub fn get_vector_store(&self, rtxn: &RoTxn<'_>) -> Result> { Ok(self .main .remap_types::>() - .get(rtxn, main_key::VECTOR_STORE_BACKEND)? - .unwrap_or_default()) + .get(rtxn, main_key::VECTOR_STORE_BACKEND)?) } pub(crate) fn delete_vector_store(&self, wtxn: &mut RwTxn<'_>) -> Result { @@ -1799,7 +1798,7 @@ impl Index { ) -> Result> { let mut res = BTreeMap::new(); let embedders = self.embedding_configs(); - let backend = self.get_vector_store(rtxn)?; + let backend = self.get_vector_store(rtxn)?.unwrap_or_default(); for config in embedders.embedding_configs(rtxn)? { let embedder_info = embedders.embedder_info(rtxn, &config.name)?.unwrap(); @@ -1828,7 +1827,7 @@ impl Index { pub fn vector_store_stats(&self, rtxn: &RoTxn<'_>) -> Result { let mut stats = VectorStoreStats::default(); let embedding_configs = self.embedding_configs(); - let backend = self.get_vector_store(rtxn)?; + let backend = self.get_vector_store(rtxn)?.unwrap_or_default(); for config in embedding_configs.embedding_configs(rtxn)? { let embedder_id = embedding_configs.embedder_id(rtxn, &config.name)?.unwrap(); diff --git a/crates/milli/src/search/facet/filter_vector.rs b/crates/milli/src/search/facet/filter_vector.rs index 2e34eb068..278179586 100644 --- a/crates/milli/src/search/facet/filter_vector.rs +++ b/crates/milli/src/search/facet/filter_vector.rs @@ -82,7 +82,7 @@ fn evaluate_inner( embedding_configs: &[IndexEmbeddingConfig], filter: &VectorFilter<'_>, ) -> crate::Result { - let backend = index.get_vector_store(rtxn)?; + let backend = index.get_vector_store(rtxn)?.unwrap_or_default(); let embedder_name = embedder.value(); let available_embedders = || embedding_configs.iter().map(|c| c.name.clone()).collect::>(); diff --git a/crates/milli/src/search/new/vector_sort.rs b/crates/milli/src/search/new/vector_sort.rs index ecd61e322..5da4c7145 100644 --- a/crates/milli/src/search/new/vector_sort.rs +++ b/crates/milli/src/search/new/vector_sort.rs @@ -54,7 +54,7 @@ impl VectorSort { vector_candidates: &RoaringBitmap, ) -> Result<()> { let target = &self.target; - let backend = ctx.index.get_vector_store(ctx.txn)?; + let backend = ctx.index.get_vector_store(ctx.txn)?.unwrap_or_default(); let before = Instant::now(); let reader = diff --git a/crates/milli/src/search/similar.rs b/crates/milli/src/search/similar.rs index fb2e8103d..b4933e1d0 100644 --- a/crates/milli/src/search/similar.rs +++ b/crates/milli/src/search/similar.rs @@ -72,7 +72,7 @@ impl<'a> Similar<'a> { crate::UserError::InvalidSimilarEmbedder(self.embedder_name.to_owned()) })?; - let backend = self.index.get_vector_store(self.rtxn)?; + let backend = self.index.get_vector_store(self.rtxn)?.unwrap_or_default(); let reader = VectorStore::new(backend, self.index.vector_store, embedder_index, self.quantized); diff --git a/crates/milli/src/update/index_documents/mod.rs b/crates/milli/src/update/index_documents/mod.rs index ea468f08b..205f8ef5d 100644 --- a/crates/milli/src/update/index_documents/mod.rs +++ b/crates/milli/src/update/index_documents/mod.rs @@ -485,7 +485,7 @@ where // If an embedder wasn't used in the typedchunk but must be binary quantized // we should insert it in `dimension` - let backend = self.index.get_vector_store(self.wtxn)?; + let backend = self.index.get_vector_store(self.wtxn)?.unwrap_or_default(); for (name, action) in settings_diff.embedding_config_updates.iter() { if action.is_being_quantized && !dimension.contains_key(name.as_str()) { let index = self.index.embedding_configs().embedder_id(self.wtxn, name)?.ok_or( diff --git a/crates/milli/src/update/index_documents/transform.rs b/crates/milli/src/update/index_documents/transform.rs index 8df8722c3..aa100f2d5 100644 --- a/crates/milli/src/update/index_documents/transform.rs +++ b/crates/milli/src/update/index_documents/transform.rs @@ -834,7 +834,7 @@ impl<'a, 'i> Transform<'a, 'i> { None }; - let backend = self.index.get_vector_store(wtxn)?; + let backend = self.index.get_vector_store(wtxn)?.unwrap_or_default(); let readers: BTreeMap<&str, (VectorStore, &RoaringBitmap)> = settings_diff .embedding_config_updates .iter() diff --git a/crates/milli/src/update/index_documents/typed_chunk.rs b/crates/milli/src/update/index_documents/typed_chunk.rs index 228dc4797..eb2a0799b 100644 --- a/crates/milli/src/update/index_documents/typed_chunk.rs +++ b/crates/milli/src/update/index_documents/typed_chunk.rs @@ -619,7 +619,7 @@ pub(crate) fn write_typed_chunk_into_index( let _entered = span.enter(); let embedders = index.embedding_configs(); - let backend = index.get_vector_store(wtxn)?; + let backend = index.get_vector_store(wtxn)?.unwrap_or_default(); let mut remove_vectors_builder = MergerBuilder::new(KeepFirst); let mut manual_vectors_builder = MergerBuilder::new(KeepFirst); diff --git a/crates/milli/src/update/new/indexer/mod.rs b/crates/milli/src/update/new/indexer/mod.rs index 3655a59f6..f613ad0b6 100644 --- a/crates/milli/src/update/new/indexer/mod.rs +++ b/crates/milli/src/update/new/indexer/mod.rs @@ -131,7 +131,7 @@ where let global_fields_ids_map = GlobalFieldsIdsMap::new(&new_fields_ids_map); let vector_arroy = index.vector_store; - let backend = index.get_vector_store(wtxn)?; + let backend = index.get_vector_store(wtxn)?.unwrap_or_default(); let vector_stores: Result> = embedders .inner_as_ref() .iter() @@ -348,7 +348,7 @@ fn vector_stores_from_embedder_actions<'indexer>( index_embedder_category_ids: &'indexer std::collections::HashMap, ) -> Result> { let vector_arroy = index.vector_store; - let backend = index.get_vector_store(rtxn)?; + let backend = index.get_vector_store(rtxn)?.unwrap_or_default(); embedders .inner_as_ref() @@ -390,7 +390,7 @@ fn delete_old_embedders_and_fragments( where SD: SettingsDelta, { - let backend = index.get_vector_store(wtxn)?; + let backend = index.get_vector_store(wtxn)?.unwrap_or_default(); for action in settings_delta.embedder_actions().values() { let Some(WriteBackToDocuments { embedder_id, .. }) = action.write_back() else { continue; diff --git a/crates/milli/src/update/new/vector_document.rs b/crates/milli/src/update/new/vector_document.rs index bff407b9f..f74d79d47 100644 --- a/crates/milli/src/update/new/vector_document.rs +++ b/crates/milli/src/update/new/vector_document.rs @@ -120,7 +120,7 @@ impl<'t> VectorDocumentFromDb<'t> { config: &IndexEmbeddingConfig, status: &EmbeddingStatus, ) -> Result> { - let backend = self.index.get_vector_store(self.rtxn)?; + let backend = self.index.get_vector_store(self.rtxn)?.unwrap_or_default(); let reader = VectorStore::new( backend, self.index.vector_store, diff --git a/crates/milli/src/update/settings.rs b/crates/milli/src/update/settings.rs index bd6e6c301..b8a8fed1c 100644 --- a/crates/milli/src/update/settings.rs +++ b/crates/milli/src/update/settings.rs @@ -1506,7 +1506,7 @@ impl<'a, 't, 'i> Settings<'a, 't, 'i> { where MSP: Fn() -> bool + Sync, { - let old_backend = self.index.get_vector_store(self.wtxn)?; + let old_backend = self.index.get_vector_store(self.wtxn)?.unwrap_or_default(); let new_backend = match self.vector_store { Setting::Set(new_backend) => {