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