Skip to main content

HnswIndex

Struct HnswIndex 

Source
pub struct HnswIndex { /* private fields */ }
Expand description

HNSW vector index backed by usearch.

Implementations§

Source§

impl HnswIndex

Source

pub fn new(config: VectorConfig) -> Result<Self, CodememError>

Create a new HNSW index with the given configuration.

Source

pub fn with_defaults() -> Result<Self, CodememError>

Create a new index with default configuration (768-dim, cosine).

Source

pub fn len(&self) -> usize

Get the number of vectors in the index.

Source

pub fn is_empty(&self) -> bool

Check if the index is empty.

Source

pub fn rebuild_from_entries( &mut self, entries: &[(String, Vec<f32>)], ) -> Result<(), CodememError>

Rebuild the index from scratch using the provided entries.

This eliminates ghost entries left behind by remove() (usearch marks removed keys but does not free their memory). The caller should collect all live (id, embedding) pairs — typically from SQLite — and pass them here.

Source

pub fn needs_compaction(&self) -> bool

Returns true if ghost entries exceed 20% of live entries, suggesting a rebuild.

Source

pub fn ghost_count(&self) -> usize

Returns the number of ghost entries in the index.

Trait Implementations§

Source§

impl VectorBackend for HnswIndex

Source§

fn insert(&mut self, id: &str, embedding: &[f32]) -> Result<(), CodememError>

Insert a vector with associated ID.
Source§

fn insert_batch( &mut self, items: &[(String, Vec<f32>)], ) -> Result<(), CodememError>

Batch insert vectors.
Source§

fn search( &self, query: &[f32], k: usize, ) -> Result<Vec<(String, f32)>, CodememError>

Search for k nearest neighbors. Returns (id, distance) pairs.
Source§

fn remove(&mut self, id: &str) -> Result<bool, CodememError>

Remove a vector by ID.
Source§

fn save(&self, path: &Path) -> Result<(), CodememError>

Save the index to disk.
Source§

fn load(&mut self, path: &Path) -> Result<(), CodememError>

Load the index from disk.
Source§

fn stats(&self) -> VectorStats

Get index statistics.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more