1pub mod flat;
4#[cfg(feature = "hnsw")]
5pub(crate) mod flat_graph;
6#[cfg(feature = "hnsw")]
7pub mod hnsw;
8#[cfg(feature = "hnsw")]
9pub mod turbo4;
10
11use crate::error::Result;
12use crate::types::{SearchResult, VectorId};
13
14pub trait VectorIndex: Send + Sync {
16 fn add(&mut self, id: VectorId, vector: Vec<f32>) -> Result<()>;
18
19 fn add_batch(&mut self, entries: Vec<(VectorId, Vec<f32>)>) -> Result<()> {
21 for (id, vector) in entries {
22 self.add(id, vector)?;
23 }
24 Ok(())
25 }
26
27 fn search(&self, query: &[f32], k: usize) -> Result<Vec<SearchResult>>;
29
30 fn search_ef(
33 &self,
34 query: &[f32],
35 k: usize,
36 _ef_search: Option<usize>,
37 ) -> Result<Vec<SearchResult>> {
38 self.search(query, k)
39 }
40
41 fn remove(&mut self, id: &VectorId) -> Result<bool>;
43
44 fn len(&self) -> usize;
46
47 fn is_empty(&self) -> bool {
49 self.len() == 0
50 }
51}