Four metrics. Seven index variants. One write.
Every vector lives inside the same atomic write as the row it describes. HNSW, IVF, IVF-PQ, binary and PQ quantization, sparse, plus predicate-aware over-fetch with `min_score` thresholds that admit empty as a real result.
Default. Geometric distance.
For pre-normalized embeddings.
Direction only. Magnitude ignored.
Robust to outliers. Categorical embeddings.
Layer-0 walker. Graph-based ANN, tunable speed / recall.
Inverted-file partitioning. The path to 10M+ vectors per tenant.
Residualised PQ LUT per cell. 64× memory at D=128, 768× at D=1536. recall@10 = 0.948 at nprobe=4 on the floor.
1-bit-per-dim. 32× memory savings. Pair with HNSW or IVF.
8-bit codebook with LUT scoring. 64× memory at the headline config.
First-class put / get / top-k for BM25-style features.
Predicate-aware widening. Recall stays at target when WHERE narrows.
Dense + sparse + a SQL filter, in one query.
Most production retrieval is hybrid - semantic similarity for recall, lexical sparse for precision, structural filters for relevance. OriginChain composes them in a single request, against one consistent snapshot.
Add a min_score threshold and an empty result is
a real result - not a confidently-wrong nearest neighbour.
POST /v1/tenants/:t/vector/search
{
"schema": "products",
"k": 10,
"dense": { "vector": [...], "metric": "cosine" },
"sparse": { "tokens": { "leather": 0.84, ... } },
"where": "in_stock = true AND region = 'EU'",
"min_score": 0.65
} - post-1.0Cross-encoder reranking. Multi-vector documents.