Skip to main content

VectorStore

Trait VectorStore 

Source
pub trait VectorStore: Send + Sync {
Show 21 methods // Required methods fn add<'life0, 'async_trait>( &'life0 self, id: String, vector: Vec<f32>, metadata: HashMap<String, Value>, ) -> Pin<Box<dyn Future<Output = Layer3Result<bool>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn add_batch<'life0, 'async_trait>( &'life0 self, items: Vec<VectorItem>, ) -> Pin<Box<dyn Future<Output = Layer3Result<Vec<bool>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn query<'life0, 'async_trait>( &'life0 self, vector: Vec<f32>, top_k: usize, ) -> Pin<Box<dyn Future<Output = Layer3Result<Vec<RetrievalResult>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn delete<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Layer3Result<bool>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn delete_batch<'life0, 'life1, 'async_trait>( &'life0 self, ids: &'life1 [String], ) -> Pin<Box<dyn Future<Output = Layer3Result<usize>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Layer3Result<Option<VectorItem>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn count<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Layer3Result<usize>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn clear<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Layer3Result<bool>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; // Provided methods fn add_validated<'life0, 'async_trait>( &'life0 self, id: String, vector: Vec<f32>, metadata: HashMap<String, Value>, expected_dimension: usize, ) -> Pin<Box<dyn Future<Output = Layer3Result<bool>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait { ... } fn query_with_filter<'life0, 'async_trait>( &'life0 self, vector: Vec<f32>, top_k: usize, filter: Option<MetadataFilter>, ) -> Pin<Box<dyn Future<Output = Layer3Result<Vec<RetrievalResult>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait { ... } fn query_with_threshold<'life0, 'async_trait>( &'life0 self, vector: Vec<f32>, top_k: usize, min_score: f32, ) -> Pin<Box<dyn Future<Output = Layer3Result<Vec<RetrievalResult>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait { ... } fn delete_by_filter<'life0, 'async_trait>( &'life0 self, filter: MetadataFilter, ) -> Pin<Box<dyn Future<Output = Layer3Result<usize>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait { ... } fn get_batch<'life0, 'life1, 'async_trait>( &'life0 self, ids: &'life1 [String], ) -> Pin<Box<dyn Future<Output = Layer3Result<Vec<Option<VectorItem>>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait { ... } fn upsert<'life0, 'async_trait>( &'life0 self, id: String, vector: Vec<f32>, metadata: HashMap<String, Value>, ) -> Pin<Box<dyn Future<Output = Layer3Result<bool>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait { ... } fn exists<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Layer3Result<bool>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait { ... } fn stats<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Layer3Result<VectorStoreStats>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait { ... } fn persist<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Layer3Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait { ... } fn load<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Layer3Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait { ... } fn persist_async<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Layer3Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait { ... } fn persist_sync(&self) -> Layer3Result<()> { ... } fn validate_dimension( &self, vector: &[f32], expected: usize, ) -> Layer3Result<()> { ... }
}
Expand description

向量存储 trait

定义向量持久化存储接口。

§Example

use sh_layer3::vector_store::{VectorStore, VectorItem, InMemoryVectorStore};

#[tokio::main]
async fn main() {
    let store = InMemoryVectorStore::in_memory();

    // 添加向量
    let item = VectorItem::new("doc-1", vec![0.1, 0.2, 0.3])
        .with_content("Hello world");
    store.add_batch(vec![item]).await.unwrap();

    // 查询相似向量
    let results = store.query(vec![0.1, 0.2, 0.3], 5).await.unwrap();
}

Required Methods§

Source

fn add<'life0, 'async_trait>( &'life0 self, id: String, vector: Vec<f32>, metadata: HashMap<String, Value>, ) -> Pin<Box<dyn Future<Output = Layer3Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

添加向量

Source

fn add_batch<'life0, 'async_trait>( &'life0 self, items: Vec<VectorItem>, ) -> Pin<Box<dyn Future<Output = Layer3Result<Vec<bool>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

批量添加向量(优化版本)

使用并行处理和减少锁争用优化大批量插入。

Source

fn query<'life0, 'async_trait>( &'life0 self, vector: Vec<f32>, top_k: usize, ) -> Pin<Box<dyn Future<Output = Layer3Result<Vec<RetrievalResult>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

查询相似向量

Source

fn delete<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Layer3Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

删除向量

Source

fn delete_batch<'life0, 'life1, 'async_trait>( &'life0 self, ids: &'life1 [String], ) -> Pin<Box<dyn Future<Output = Layer3Result<usize>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

批量删除(优化版本)

Source

fn get<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Layer3Result<Option<VectorItem>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

获取向量

Source

fn count<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Layer3Result<usize>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

统计数量

Source

fn clear<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Layer3Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

清空存储

Provided Methods§

Source

fn add_validated<'life0, 'async_trait>( &'life0 self, id: String, vector: Vec<f32>, metadata: HashMap<String, Value>, expected_dimension: usize, ) -> Pin<Box<dyn Future<Output = Layer3Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

添加向量(带验证)

验证向量维度并返回详细错误信息。

Source

fn query_with_filter<'life0, 'async_trait>( &'life0 self, vector: Vec<f32>, top_k: usize, filter: Option<MetadataFilter>, ) -> Pin<Box<dyn Future<Output = Layer3Result<Vec<RetrievalResult>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

带过滤条件的查询

Source

fn query_with_threshold<'life0, 'async_trait>( &'life0 self, vector: Vec<f32>, top_k: usize, min_score: f32, ) -> Pin<Box<dyn Future<Output = Layer3Result<Vec<RetrievalResult>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

带分数阈值的查询

只返回分数高于阈值的向量。

Source

fn delete_by_filter<'life0, 'async_trait>( &'life0 self, filter: MetadataFilter, ) -> Pin<Box<dyn Future<Output = Layer3Result<usize>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

删除所有匹配元数据条件的向量

Source

fn get_batch<'life0, 'life1, 'async_trait>( &'life0 self, ids: &'life1 [String], ) -> Pin<Box<dyn Future<Output = Layer3Result<Vec<Option<VectorItem>>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

批量获取向量

Source

fn upsert<'life0, 'async_trait>( &'life0 self, id: String, vector: Vec<f32>, metadata: HashMap<String, Value>, ) -> Pin<Box<dyn Future<Output = Layer3Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

更新向量(存在则更新,不存在则创建)

Source

fn exists<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Layer3Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

检查向量是否存在

Source

fn stats<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Layer3Result<VectorStoreStats>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

获取存储统计信息

Source

fn persist<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Layer3Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

持久化到磁盘(可选)

Source

fn load<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Layer3Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

从磁盘加载(可选)

Source

fn persist_async<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Layer3Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

异步持久化(后台线程)

Source

fn persist_sync(&self) -> Layer3Result<()>

强制同步持久化

Source

fn validate_dimension( &self, vector: &[f32], expected: usize, ) -> Layer3Result<()>

验证向量维度

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§