Skip to main content

VectorIndex

Trait VectorIndex 

Source
pub trait VectorIndex: Send + Sync {
    // Required methods
    fn upsert<'life0, 'async_trait>(
        &'life0 self,
        key: RecordKey,
        vector: Vec<f32>,
    ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn remove<'life0, 'life1, 'async_trait>(
        &'life0 self,
        key: &'life1 RecordKey,
    ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;
    fn query<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 self,
        query: &'life1 [f32],
        k: usize,
        filter: &'life2 KeyPrefix,
    ) -> Pin<Box<dyn Future<Output = Result<Vec<Match>>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait;
    fn keys<'life0, 'life1, 'async_trait>(
        &'life0 self,
        filter: &'life1 KeyPrefix,
    ) -> Pin<Box<dyn Future<Output = Result<Vec<RecordKey>>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;

    // Provided method
    fn upsert_many<'life0, 'async_trait>(
        &'life0 self,
        items: Vec<(RecordKey, Vec<f32>)>,
    ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait { ... }
}
Expand description

A vector index keyed by [RecordKey].

Async so remote / approximate backends can implement it later; the in-memory impl (MemoryVectorIndex) is exact brute-force cosine kNN.

Required Methods§

Source

fn upsert<'life0, 'async_trait>( &'life0 self, key: RecordKey, vector: Vec<f32>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Insert or replace the vector for key.

Source

fn remove<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 RecordKey, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Remove key if present (no error if absent).

Source

fn query<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, query: &'life1 [f32], k: usize, filter: &'life2 KeyPrefix, ) -> Pin<Box<dyn Future<Output = Result<Vec<Match>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Return the top-k matches to query, restricted to keys matching filter, ordered by descending score.

Source

fn keys<'life0, 'life1, 'async_trait>( &'life0 self, filter: &'life1 KeyPrefix, ) -> Pin<Box<dyn Future<Output = Result<Vec<RecordKey>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Every key in the index matching filter. Order is unspecified.

Used to rebuild derived state that would otherwise be lost across a restart, such as a KnowledgeStore’s per-record chunk counts.

Provided Methods§

Source

fn upsert_many<'life0, 'async_trait>( &'life0 self, items: Vec<(RecordKey, Vec<f32>)>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Insert or replace many vectors at once.

The default loops over upsert. A durable backend overrides this: committing once per vector would mean one manifest commit per vector on a bulk load.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl<T: VectorIndex + ?Sized> VectorIndex for Arc<T>

Source§

fn upsert<'life0, 'async_trait>( &'life0 self, key: RecordKey, vector: Vec<f32>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source§

fn remove<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 RecordKey, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn query<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, query: &'life1 [f32], k: usize, filter: &'life2 KeyPrefix, ) -> Pin<Box<dyn Future<Output = Result<Vec<Match>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source§

fn keys<'life0, 'life1, 'async_trait>( &'life0 self, filter: &'life1 KeyPrefix, ) -> Pin<Box<dyn Future<Output = Result<Vec<RecordKey>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn upsert_many<'life0, 'async_trait>( &'life0 self, items: Vec<(RecordKey, Vec<f32>)>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Implementors§

Source§

impl VectorIndex for MemoryVectorIndex

Source§

impl<S: Store + BlobStore + Send + Sync + 'static> VectorIndex for RecordVectorIndex<S>