//! Index structures for efficient vector search pub mod flat; #[cfg(feature = "hnsw")] pub mod hnsw; use crate::error::Result; use crate::types::{SearchResult, VectorId}; /// Trait for vector index implementations pub trait VectorIndex: Send + Sync { /// Add a vector to the index fn add(&mut self, id: VectorId, vector: Vec) -> Result<()>; /// Add multiple vectors in batch fn add_batch(&mut self, entries: Vec<(VectorId, Vec)>) -> Result<()> { for (id, vector) in entries { self.add(id, vector)?; } Ok(()) } /// Search for k nearest neighbors fn search(&self, query: &[f32], k: usize) -> Result>; /// Remove a vector from the index fn remove(&mut self, id: &VectorId) -> Result; /// Get the number of vectors in the index fn len(&self) -> usize; /// Check if the index is empty fn is_empty(&self) -> bool { self.len() == 0 } }