mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-09-06 04:36:32 +00:00
Add setting to change backend
This commit is contained in:
@ -41,6 +41,7 @@ use crate::vector::settings::{
|
|||||||
};
|
};
|
||||||
use crate::vector::{
|
use crate::vector::{
|
||||||
Embedder, EmbeddingConfig, RuntimeEmbedder, RuntimeEmbedders, RuntimeFragment,
|
Embedder, EmbeddingConfig, RuntimeEmbedder, RuntimeEmbedders, RuntimeFragment,
|
||||||
|
VectorStoreBackend,
|
||||||
};
|
};
|
||||||
use crate::{
|
use crate::{
|
||||||
ChannelCongestion, FieldId, FilterableAttributesRule, Index, LocalizedAttributesRule, Result,
|
ChannelCongestion, FieldId, FilterableAttributesRule, Index, LocalizedAttributesRule, Result,
|
||||||
@ -199,6 +200,7 @@ pub struct Settings<'a, 't, 'i> {
|
|||||||
prefix_search: Setting<PrefixSearch>,
|
prefix_search: Setting<PrefixSearch>,
|
||||||
facet_search: Setting<bool>,
|
facet_search: Setting<bool>,
|
||||||
chat: Setting<ChatSettings>,
|
chat: Setting<ChatSettings>,
|
||||||
|
vector_store: Setting<VectorStoreBackend>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 't, 'i> Settings<'a, 't, 'i> {
|
impl<'a, 't, 'i> Settings<'a, 't, 'i> {
|
||||||
@ -238,6 +240,7 @@ impl<'a, 't, 'i> Settings<'a, 't, 'i> {
|
|||||||
prefix_search: Setting::NotSet,
|
prefix_search: Setting::NotSet,
|
||||||
facet_search: Setting::NotSet,
|
facet_search: Setting::NotSet,
|
||||||
chat: Setting::NotSet,
|
chat: Setting::NotSet,
|
||||||
|
vector_store: Setting::NotSet,
|
||||||
indexer_config,
|
indexer_config,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -476,6 +479,14 @@ impl<'a, 't, 'i> Settings<'a, 't, 'i> {
|
|||||||
self.chat = Setting::Reset;
|
self.chat = Setting::Reset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_vector_store(&mut self, value: VectorStoreBackend) {
|
||||||
|
self.vector_store = Setting::Set(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn reset_vector_store(&mut self) {
|
||||||
|
self.vector_store = Setting::Reset;
|
||||||
|
}
|
||||||
|
|
||||||
#[tracing::instrument(
|
#[tracing::instrument(
|
||||||
level = "trace"
|
level = "trace"
|
||||||
skip(self, progress_callback, should_abort, settings_diff, embedder_stats),
|
skip(self, progress_callback, should_abort, settings_diff, embedder_stats),
|
||||||
@ -1417,7 +1428,7 @@ impl<'a, 't, 'i> Settings<'a, 't, 'i> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn legacy_execute<FP, FA>(
|
fn legacy_execute<FP, FA>(
|
||||||
mut self,
|
mut self,
|
||||||
progress_callback: FP,
|
progress_callback: FP,
|
||||||
should_abort: FA,
|
should_abort: FA,
|
||||||
@ -1486,6 +1497,51 @@ impl<'a, 't, 'i> Settings<'a, 't, 'i> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn execute_vector_backend<'indexer, MSP>(
|
||||||
|
&mut self,
|
||||||
|
must_stop_processing: &'indexer MSP,
|
||||||
|
progress: &'indexer Progress,
|
||||||
|
) -> Result<()>
|
||||||
|
where
|
||||||
|
MSP: Fn() -> bool + Sync,
|
||||||
|
{
|
||||||
|
let new_backend = match self.vector_store {
|
||||||
|
Setting::Set(new_backend) => {
|
||||||
|
self.index.put_vector_store(self.wtxn, new_backend)?;
|
||||||
|
new_backend
|
||||||
|
}
|
||||||
|
Setting::Reset => {
|
||||||
|
self.index.delete_vector_store(self.wtxn)?;
|
||||||
|
VectorStoreBackend::default()
|
||||||
|
}
|
||||||
|
Setting::NotSet => return Ok(()),
|
||||||
|
};
|
||||||
|
let old_backend = self.index.get_vector_store(self.wtxn)?;
|
||||||
|
|
||||||
|
if old_backend == new_backend {
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
|
let embedding_configs = self.index.embedding_configs();
|
||||||
|
for config in embedding_configs.embedding_configs(self.wtxn)? {
|
||||||
|
if must_stop_processing() {
|
||||||
|
return Err(crate::InternalError::AbortedIndexation.into());
|
||||||
|
}
|
||||||
|
/// TODO use the embedder name to display progress
|
||||||
|
let quantized = config.config.quantized();
|
||||||
|
let embedder_id = embedding_configs.embedder_id(self.wtxn, &config.name)?.unwrap();
|
||||||
|
let mut vector_store = crate::vector::VectorStore::new(
|
||||||
|
old_backend,
|
||||||
|
self.index.vector_store,
|
||||||
|
embedder_id,
|
||||||
|
quantized,
|
||||||
|
);
|
||||||
|
vector_store.change_backend(self.wtxn, progress.clone(), must_stop_processing)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn execute<'indexer, MSP>(
|
pub fn execute<'indexer, MSP>(
|
||||||
mut self,
|
mut self,
|
||||||
must_stop_processing: &'indexer MSP,
|
must_stop_processing: &'indexer MSP,
|
||||||
@ -1495,6 +1551,9 @@ impl<'a, 't, 'i> Settings<'a, 't, 'i> {
|
|||||||
where
|
where
|
||||||
MSP: Fn() -> bool + Sync,
|
MSP: Fn() -> bool + Sync,
|
||||||
{
|
{
|
||||||
|
// execute any pending vector store backend change
|
||||||
|
self.execute_vector_backend(must_stop_processing, progress)?;
|
||||||
|
|
||||||
// force the old indexer if the environment says so
|
// force the old indexer if the environment says so
|
||||||
if self.indexer_config.experimental_no_edition_2024_for_settings {
|
if self.indexer_config.experimental_no_edition_2024_for_settings {
|
||||||
return self
|
return self
|
||||||
@ -1536,6 +1595,7 @@ impl<'a, 't, 'i> Settings<'a, 't, 'i> {
|
|||||||
facet_search: Setting::NotSet,
|
facet_search: Setting::NotSet,
|
||||||
disable_on_numbers: Setting::NotSet,
|
disable_on_numbers: Setting::NotSet,
|
||||||
chat: Setting::NotSet,
|
chat: Setting::NotSet,
|
||||||
|
vector_store: Setting::NotSet,
|
||||||
wtxn: _,
|
wtxn: _,
|
||||||
index: _,
|
index: _,
|
||||||
indexer_config: _,
|
indexer_config: _,
|
||||||
|
@ -898,6 +898,7 @@ fn test_correct_settings_init() {
|
|||||||
facet_search,
|
facet_search,
|
||||||
disable_on_numbers,
|
disable_on_numbers,
|
||||||
chat,
|
chat,
|
||||||
|
vector_store,
|
||||||
} = settings;
|
} = settings;
|
||||||
assert!(matches!(searchable_fields, Setting::NotSet));
|
assert!(matches!(searchable_fields, Setting::NotSet));
|
||||||
assert!(matches!(displayed_fields, Setting::NotSet));
|
assert!(matches!(displayed_fields, Setting::NotSet));
|
||||||
@ -927,6 +928,7 @@ fn test_correct_settings_init() {
|
|||||||
assert!(matches!(facet_search, Setting::NotSet));
|
assert!(matches!(facet_search, Setting::NotSet));
|
||||||
assert!(matches!(disable_on_numbers, Setting::NotSet));
|
assert!(matches!(disable_on_numbers, Setting::NotSet));
|
||||||
assert!(matches!(chat, Setting::NotSet));
|
assert!(matches!(chat, Setting::NotSet));
|
||||||
|
assert!(matches!(vector_store, Setting::NotSet));
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user