pub mod flat;
#[cfg(feature = "hnsw")]
pub mod hnsw;
use crate::error::Result;
use crate::types::{SearchResult, VectorId};
pub trait VectorIndex: Send + Sync {
fn add(&mut self, id: VectorId, vector: Vec<f32>) -> Result<()>;
fn add_batch(&mut self, entries: Vec<(VectorId, Vec<f32>)>) -> Result<()> {
for (id, vector) in entries {
self.add(id, vector)?;
}
Ok(())
}
fn search(&self, query: &[f32], k: usize) -> Result<Vec<SearchResult>>;
fn remove(&mut self, id: &VectorId) -> Result<bool>;
fn len(&self) -> usize;
fn is_empty(&self) -> bool {
self.len() == 0
}
}