manifoldb_vector/store/mod.rs
1//! Vector embedding storage.
2//!
3//! This module provides storage for vector embeddings associated with entities.
4//!
5//! # Overview
6//!
7//! ## Entity-based embedding stores
8//!
9//! The [`VectorStore`] manages dense embeddings organized into named embedding spaces.
10//! The [`SparseVectorStore`] manages sparse embeddings for high-dimensional vectors
11//! with few non-zero elements (e.g., SPLADE embeddings).
12//! The [`MultiVectorStore`] manages multi-vector embeddings for ColBERT-style
13//! late interaction models.
14//!
15//! Each entity can have embeddings in multiple spaces (e.g., `text_embedding`,
16//! `image_embedding`), and each space has a fixed dimension and distance metric.
17//!
18//! ## Collection vector store (entity-to-vector mapping)
19//!
20//! The [`CollectionVectorStore`] provides dedicated vector storage separate from
21//! entity properties. This enables:
22//! - Storage efficiency: Read entities without loading vector data
23//! - Multiple embeddings per entity: Support text, image, summary embeddings
24//! - Independent operations: Update vectors without touching entities
25//! - Cascade deletion: Delete all vectors when entity is removed
26//!
27//! ## Point collections (Qdrant-style)
28//!
29//! The [`PointStore`] manages points with multiple named vectors and JSON payloads.
30//! Points are organized into collections, and each point can have any combination
31//! of dense, sparse, or multi-vectors.
32//!
33//! ## Inverted index for sparse vectors
34//!
35//! The [`InvertedIndex`] provides efficient top-k similarity search for sparse vectors
36//! using posting lists and WAND/DAAT algorithms. This is optimized for SPLADE-style
37//! sparse retrieval.
38//!
39//! # Example (Entity embeddings)
40//!
41//! ```ignore
42//! use manifoldb_vector::store::VectorStore;
43//! use manifoldb_vector::types::{Embedding, EmbeddingName, EmbeddingSpace};
44//! use manifoldb_vector::distance::DistanceMetric;
45//! use manifoldb_core::EntityId;
46//!
47//! // Create a store with a storage backend
48//! let store = VectorStore::new(engine);
49//!
50//! // Create an embedding space
51//! let name = EmbeddingName::new("text_embedding")?;
52//! let space = EmbeddingSpace::new(name.clone(), 384, DistanceMetric::Cosine);
53//! store.create_space(&space)?;
54//!
55//! // Store an embedding
56//! let embedding = Embedding::new(vec![0.1; 384])?;
57//! store.put(EntityId::new(1), &name, &embedding)?;
58//!
59//! // Retrieve it
60//! let retrieved = store.get(EntityId::new(1), &name)?;
61//! ```
62//!
63//! # Example (Point collections)
64//!
65//! ```ignore
66//! use manifoldb_vector::store::PointStore;
67//! use manifoldb_vector::types::{CollectionName, CollectionSchema, VectorConfig, Payload, NamedVector};
68//! use manifoldb_core::PointId;
69//! use std::collections::HashMap;
70//!
71//! // Create a point store
72//! let store = PointStore::new(engine);
73//!
74//! // Create a collection with schema
75//! let name = CollectionName::new("documents")?;
76//! let schema = CollectionSchema::new()
77//! .with_vector("dense", VectorConfig::dense(384))
78//! .with_vector("sparse", VectorConfig::sparse(30522));
79//! store.create_collection(&name, schema)?;
80//!
81//! // Insert a point
82//! let mut payload = Payload::new();
83//! payload.insert("title", "Hello World".into());
84//!
85//! let mut vectors = HashMap::new();
86//! vectors.insert("dense".to_string(), NamedVector::Dense(vec![0.1; 384]));
87//! vectors.insert("sparse".to_string(), NamedVector::Sparse(vec![(100, 0.5)]));
88//!
89//! store.upsert_point(&name, PointId::new(1), payload, vectors)?;
90//! ```
91
92mod collection_vector_store;
93mod inverted_index;
94mod multi_vector_store;
95mod point_store;
96mod sparse_store;
97mod vector_store;
98
99pub use collection_vector_store::{
100 decode_vector_value, encode_vector_value, CollectionVectorStore, TABLE_COLLECTION_VECTORS,
101};
102pub use inverted_index::{
103 InvertedIndex, InvertedIndexMeta, PostingEntry, PostingList, ScoringFunction, SearchResult,
104};
105pub use multi_vector_store::MultiVectorStore;
106pub use point_store::PointStore;
107pub use sparse_store::SparseVectorStore;
108pub use vector_store::VectorStore;