manifoldb_vector/lib.rs
1//! `ManifoldDB` Vector
2//!
3//! This crate provides vector embedding storage and similarity search
4//! capabilities for `ManifoldDB`.
5//!
6//! # Overview
7//!
8//! The vector module provides:
9//!
10//! - **Embedding storage**: Store and retrieve vector embeddings associated with entities
11//! - **Embedding spaces**: Named spaces with fixed dimensions and distance metrics
12//! - **Distance functions**: Cosine, Euclidean, and dot product similarity
13//!
14//! # Example
15//!
16//! ```ignore
17//! use manifoldb_vector::store::VectorStore;
18//! use manifoldb_vector::types::{Embedding, EmbeddingName, EmbeddingSpace};
19//! use manifoldb_vector::distance::DistanceMetric;
20//! use manifoldb_core::EntityId;
21//! use manifoldb_storage::backends::RedbEngine;
22//!
23//! // Create a store
24//! let engine = RedbEngine::in_memory()?;
25//! let store = VectorStore::new(engine);
26//!
27//! // Create an embedding space
28//! let name = EmbeddingName::new("text_embedding")?;
29//! let space = EmbeddingSpace::new(name.clone(), 384, DistanceMetric::Cosine);
30//! store.create_space(&space)?;
31//!
32//! // Store embeddings
33//! let embedding = Embedding::new(vec![0.1; 384])?;
34//! store.put(EntityId::new(1), &name, &embedding)?;
35//!
36//! // Retrieve embeddings
37//! let retrieved = store.get(EntityId::new(1), &name)?;
38//! ```
39//!
40//! # Modules
41//!
42//! - [`store`] - Vector embedding storage
43//! - [`types`] - Core types ([`Embedding`], [`EmbeddingSpace`], [`EmbeddingName`])
44//! - [`distance`] - Distance functions
45//! - [`encoding`] - Key encoding for storage
46//! - [`error`] - Error types
47//! - [`index`] - Vector indexes (HNSW)
48//! - [`ops`] - Vector search operators ([`AnnScan`], [`ExactKnn`], [`VectorFilter`])
49//!
50//! # Search Operators
51//!
52//! The [`ops`] module provides operators for vector similarity search:
53//!
54//! - [`AnnScan`] - Approximate nearest neighbor search using HNSW
55//! - [`ExactKnn`] - Brute force k-NN search for small sets or validation
56//! - [`VectorFilter`] - Post-filter results by predicates
57//!
58//! ## Example
59//!
60//! ```ignore
61//! use manifoldb_vector::ops::{AnnScan, VectorOperator, SearchConfig};
62//!
63//! // Search for 10 nearest neighbors
64//! let mut scan = AnnScan::k_nearest(&index, &query, 10)?;
65//!
66//! while let Some(m) = scan.next()? {
67//! println!("Entity {:?} at distance {}", m.entity_id, m.distance);
68//! }
69//! ```
70
71pub mod distance;
72pub mod encoding;
73pub mod error;
74pub mod index;
75pub mod ops;
76pub mod quantization;
77pub mod store;
78pub mod types;
79
80// Re-export commonly used types
81pub use distance::{chebyshev_distance, manhattan_distance, CachedNorm, DistanceMetric};
82pub use error::VectorError;
83pub use index::{
84 HnswConfig, HnswIndex, HnswIndexManager, RecoveryStatus, SearchResult, VectorIndex,
85};
86pub use ops::{AnnScan, ExactKnn, SearchConfig, VectorFilter, VectorMatch, VectorOperator};
87pub use quantization::{KMeans, KMeansConfig, PQCode, PQConfig, ProductQuantizer};
88pub use store::{
89 decode_vector_value, encode_vector_value, CollectionVectorStore, PointStore, SparseVectorStore,
90 VectorStore, TABLE_COLLECTION_VECTORS,
91};
92pub use types::{
93 BinaryEmbedding, BinaryEmbeddingSpace, Collection, CollectionName, CollectionSchema, Embedding,
94 EmbeddingName, EmbeddingSpace, NamedVector, Payload, SparseEmbedding, SparseEmbeddingSpace,
95 VectorConfig, VectorData, VectorName, VectorRef, VectorType,
96};