embeddenator-retrieval
Semantic retrieval and search operations for VSA-based vector representations.
Independent component extracted from the Embeddenator monolithic repository. Part of the Embeddenator workspace.
Repository: https://github.com/tzervas/embeddenator-retrieval
Features
- Fast Inverted Indexing: Sub-linear candidate generation for large-scale search
- Multiple Similarity Metrics: Cosine, Hamming, Jaccard, and dot product
- Search Strategies:
- Exact search (brute force, ground truth)
- Approximate search (inverted index, fast)
- Two-stage search (candidate generation + reranking, balanced)
- Hierarchical search (clustering-based)
- Index Structures: Brute force, hierarchical clustering
- Resonator Networks: Pattern completion and factorization
- Algebraic Correction: Guaranteed bitwise reconstruction
- VSA Integration: Native support for sparse ternary vectors
Status
**** - Full retrieval functionality migrated from monolithic repo.
Implementation Progress
- Inverted index (TernaryInvertedIndex)
- Similarity metrics (Cosine, Hamming, Jaccard, DotProduct)
- Search strategies (Exact, Approximate, Two-stage, Batch)
- Index structures (BruteForce, Hierarchical)
- Resonator networks for pattern completion
- Algebraic correction layer
- Comprehensive test suite (similarity, search, index)
- Performance benchmarks
Usage
Basic Retrieval
use ;
use SparseVec;
use HashMap;
// Build index
let mut index = new;
let mut vectors = new;
let vec1 = from_data;
let vec2 = from_data;
let vec3 = from_data;
index.add;
index.add;
index.add;
index.finalize;
vectors.insert;
vectors.insert;
vectors.insert;
// Search with two-stage retrieval (fast + accurate)
let query = from_data;
let config = default;
let results = two_stage_search;
for result in results
Different Similarity Metrics
use ;
use SparseVec;
let a = from_data;
let b = from_data;
let cosine = compute_similarity;
let hamming = compute_similarity;
let jaccard = compute_similarity;
println!;
Performance
Estimated benchmarks on a modern multi-core CPU (corpus size = 10,000 vectors):
| Strategy | Latency (avg) | Throughput | Recall@10 |
|---|---|---|---|
| Approximate | ~0.5ms | ~2000 QPS | ~0.85 |
| Two-stage (candidate_k=200) | ~2ms | ~500 QPS | ~0.98 |
| Exact | ~15ms | ~66 QPS | 1.00 |
Note: Actual performance varies significantly based on hardware, vector dimensionality, data distribution, and query patterns. Run benchmarks on your system for accurate numbers:
Run benchmarks:
Testing
# Run all tests
# Run specific test suite
# Run with output
Development
# Build
# Local development with other Embeddenator components
# Add to workspace Cargo.toml:
Integration with Other Components
- embeddenator-vsa: Uses
SparseVecfor all vector operations - embeddenator-obs: Provides observability for search operations
- embeddenator-fs: Uses retrieval for file similarity search
Architecture
See ADR-016 for component decomposition rationale.
License
MIT