get_vector_store returns an option, handles it in Index::settings

This commit is contained in:
Louis Dureuil
2025-09-08 16:53:57 +02:00
parent 6376571df0
commit a8cd81c7f4
11 changed files with 19 additions and 17 deletions

View File

@ -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,
};

View File

@ -469,12 +469,11 @@ impl Index {
)?)
}
pub fn get_vector_store(&self, rtxn: &RoTxn<'_>) -> Result<VectorStoreBackend> {
pub fn get_vector_store(&self, rtxn: &RoTxn<'_>) -> Result<Option<VectorStoreBackend>> {
Ok(self
.main
.remap_types::<Str, SerdeJson<VectorStoreBackend>>()
.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<bool> {
@ -1799,7 +1798,7 @@ impl Index {
) -> Result<BTreeMap<String, EmbeddingsWithMetadata>> {
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<VectorStoreStats> {
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();

View File

@ -82,7 +82,7 @@ fn evaluate_inner(
embedding_configs: &[IndexEmbeddingConfig],
filter: &VectorFilter<'_>,
) -> crate::Result<RoaringBitmap> {
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::<Vec<_>>();

View File

@ -54,7 +54,7 @@ impl<Q: RankingRuleQueryTrait> VectorSort<Q> {
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 =

View File

@ -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);

View File

@ -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(

View File

@ -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()

View File

@ -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);

View File

@ -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<HashMap<_, _>> = embedders
.inner_as_ref()
.iter()
@ -348,7 +348,7 @@ fn vector_stores_from_embedder_actions<'indexer>(
index_embedder_category_ids: &'indexer std::collections::HashMap<String, u8>,
) -> Result<HashMap<u8, (&'indexer str, &'indexer Embedder, VectorStore, usize)>> {
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<SD>(
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;

View File

@ -120,7 +120,7 @@ impl<'t> VectorDocumentFromDb<'t> {
config: &IndexEmbeddingConfig,
status: &EmbeddingStatus,
) -> Result<VectorEntry<'t>> {
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,

View File

@ -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) => {