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
71// Deny unwrap in library code to ensure proper error handling
72#![deny(clippy::unwrap_used)]
73
74pub mod distance;
75pub mod encoding;
76pub mod error;
77pub mod index;
78pub mod ops;
79pub mod quantization;
80pub mod store;
81pub mod types;
82
83// Re-export commonly used types
84pub use distance::{chebyshev_distance, manhattan_distance, CachedNorm, DistanceMetric};
85pub use error::VectorError;
86pub use index::{
87 HnswConfig, HnswIndex, HnswIndexManager, RecoveryStatus, SearchResult, VectorIndex,
88};
89pub use ops::{AnnScan, ExactKnn, SearchConfig, VectorFilter, VectorMatch, VectorOperator};
90pub use quantization::{KMeans, KMeansConfig, PQCode, PQConfig, ProductQuantizer};
91pub use store::{
92 decode_vector_value, encode_vector_value, CollectionVectorStore, PointStore, SparseVectorStore,
93 VectorStore, TABLE_COLLECTION_VECTORS,
94};
95pub use types::{
96 BinaryEmbedding, BinaryEmbeddingSpace, Collection, CollectionName, CollectionSchema, Embedding,
97 EmbeddingName, EmbeddingSpace, NamedVector, Payload, SparseEmbedding, SparseEmbeddingSpace,
98 VectorConfig, VectorData, VectorName, VectorRef, VectorType,
99};