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§
Sourcefn 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<'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,
添加向量
Sourcefn 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 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,
批量添加向量(优化版本)
使用并行处理和减少锁争用优化大批量插入。
Sourcefn 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 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,
查询相似向量
Sourcefn 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<'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,
删除向量
Sourcefn 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 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,
批量删除(优化版本)
Sourcefn 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 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,
获取向量
Provided Methods§
Sourcefn 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 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,
添加向量(带验证)
验证向量维度并返回详细错误信息。
Sourcefn 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_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,
带过滤条件的查询
Sourcefn 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 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,
带分数阈值的查询
只返回分数高于阈值的向量。
Sourcefn 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 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,
删除所有匹配元数据条件的向量
Sourcefn 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 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,
批量获取向量
Sourcefn 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 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,
更新向量(存在则更新,不存在则创建)
Sourcefn 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 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,
检查向量是否存在
Sourcefn stats<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Layer3Result<VectorStoreStats>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: '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,
获取存储统计信息
Sourcefn persist<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Layer3Result<()>> + 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,
持久化到磁盘(可选)
Sourcefn load<'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,
从磁盘加载(可选)
Sourcefn 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_async<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Layer3Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
异步持久化(后台线程)
Sourcefn persist_sync(&self) -> Layer3Result<()>
fn persist_sync(&self) -> Layer3Result<()>
强制同步持久化
Sourcefn validate_dimension(
&self,
vector: &[f32],
expected: usize,
) -> Layer3Result<()>
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".