Expand description
Vector embedding storage.
This module provides storage for vector embeddings associated with entities.
§Overview
§Entity-based embedding stores
The VectorStore manages dense embeddings organized into named embedding spaces.
The SparseVectorStore manages sparse embeddings for high-dimensional vectors
with few non-zero elements (e.g., SPLADE embeddings).
The MultiVectorStore manages multi-vector embeddings for ColBERT-style
late interaction models.
Each entity can have embeddings in multiple spaces (e.g., text_embedding,
image_embedding), and each space has a fixed dimension and distance metric.
§Collection vector store (entity-to-vector mapping)
The CollectionVectorStore provides dedicated vector storage separate from
entity properties. This enables:
- Storage efficiency: Read entities without loading vector data
- Multiple embeddings per entity: Support text, image, summary embeddings
- Independent operations: Update vectors without touching entities
- Cascade deletion: Delete all vectors when entity is removed
§Point collections (Qdrant-style)
The PointStore manages points with multiple named vectors and JSON payloads.
Points are organized into collections, and each point can have any combination
of dense, sparse, or multi-vectors.
§Inverted index for sparse vectors
The InvertedIndex provides efficient top-k similarity search for sparse vectors
using posting lists and WAND/DAAT algorithms. This is optimized for SPLADE-style
sparse retrieval.
§Example (Entity embeddings)
use manifoldb_vector::store::VectorStore;
use manifoldb_vector::types::{Embedding, EmbeddingName, EmbeddingSpace};
use manifoldb_vector::distance::DistanceMetric;
use manifoldb_core::EntityId;
// Create a store with a storage backend
let store = VectorStore::new(engine);
// Create an embedding space
let name = EmbeddingName::new("text_embedding")?;
let space = EmbeddingSpace::new(name.clone(), 384, DistanceMetric::Cosine);
store.create_space(&space)?;
// Store an embedding
let embedding = Embedding::new(vec![0.1; 384])?;
store.put(EntityId::new(1), &name, &embedding)?;
// Retrieve it
let retrieved = store.get(EntityId::new(1), &name)?;§Example (Point collections)
use manifoldb_vector::store::PointStore;
use manifoldb_vector::types::{CollectionName, CollectionSchema, VectorConfig, Payload, NamedVector};
use manifoldb_core::PointId;
use std::collections::HashMap;
// Create a point store
let store = PointStore::new(engine);
// Create a collection with schema
let name = CollectionName::new("documents")?;
let schema = CollectionSchema::new()
.with_vector("dense", VectorConfig::dense(384))
.with_vector("sparse", VectorConfig::sparse(30522));
store.create_collection(&name, schema)?;
// Insert a point
let mut payload = Payload::new();
payload.insert("title", "Hello World".into());
let mut vectors = HashMap::new();
vectors.insert("dense".to_string(), NamedVector::Dense(vec![0.1; 384]));
vectors.insert("sparse".to_string(), NamedVector::Sparse(vec![(100, 0.5)]));
store.upsert_point(&name, PointId::new(1), payload, vectors)?;Structs§
- Collection
Vector Store - Vector storage for collections.
- Inverted
Index - Inverted index for sparse vector similarity search.
- Inverted
Index Meta - Inverted index metadata for a vector.
- Multi
Vector Store - A store for multi-vector embeddings (ColBERT-style).
- Point
Store - A store for points with multiple named vectors.
- Posting
Entry - A posting list entry: (point_id, weight).
- Posting
List - A posting list for a single token.
- Search
Result - A search result with point ID and score.
- Sparse
Vector Store - A store for sparse vector embeddings.
- Vector
Store - A store for vector embeddings.
Enums§
- Scoring
Function - Scoring function for sparse vector similarity.
Constants§
- TABLE_
COLLECTION_ VECTORS - Table name for collection vectors.
Functions§
- decode_
vector_ value - Decode a vector value from storage.
- encode_
vector_ value - Encode a vector value for storage.