1pub mod flat;
4#[cfg(feature = "hnsw")]
5pub mod hnsw;
6#[cfg(feature = "hnsw")]
7pub mod turbo4;
8
9use crate::error::Result;
10use crate::types::{SearchResult, VectorId};
11
12pub trait VectorIndex: Send + Sync {
14 fn add(&mut self, id: VectorId, vector: Vec<f32>) -> Result<()>;
16
17 fn add_batch(&mut self, entries: Vec<(VectorId, Vec<f32>)>) -> Result<()> {
19 for (id, vector) in entries {
20 self.add(id, vector)?;
21 }
22 Ok(())
23 }
24
25 fn search(&self, query: &[f32], k: usize) -> Result<Vec<SearchResult>>;
27
28 fn remove(&mut self, id: &VectorId) -> Result<bool>;
30
31 fn len(&self) -> usize;
33
34 fn is_empty(&self) -> bool {
36 self.len() == 0
37 }
38}