How search works
HNSW in RAM, exact re-rank from NVMe.
Each namespace has one HNSW graph (cosine similarity; M = 16, efConstruction = 200, ef 64 by default, tunable per query with EF). The full float32 vectors always live in the value log; how much of them RAM holds is a per-namespace choice.
Memory layouts (VCREATE ns dim QUANT none|int8|pq GRAPH memory|disk), measured as Go heap per 768-dim vector over 10K vectors on macOS: float32 3,383 B; int8 1,078 B, top 4 × k candidates re-ranked from disk; PQ (m = 96) 493 B, the whole beam re-ranked; PQ + GRAPH disk 378 B of heap plus 216 B in a memory-mapped file the kernel can page to NVMe. The re-rank reads the candidates’ float32 vectors with one parallel MultiGet.
Text and hybrid: Okapi BM25 (k1 = 1.2, b = 0.75) over lowercase runs of Unicode letters and digits — Indic scripts stay whole; no stemming, stop words or phrase queries. HSEARCH fuses with RRF, score = α/(60 + rank_vec) + (1 − α)/(60 + rank_text). Clusters: searches fan out to every non-failed node and merge; BM25 sums every node’s statistics first. A peer that misses --search-timeout-ms (2000) fails the request and is named, unless --search-allow-partial. The node-to-node listener is signed with HMAC-SHA256 via --cluster-secret-file, or use mTLS; without either the server warns it is unauthenticated.
What it won’t do yet: the graph and inverted index are rebuilt at every start and searches are refused until that ends; tested to 100K real vectors and 10K at 768-dim, nothing at 10M+; one graph per namespace, cosine only, no GPU; on v1.13 and earlier DEL removes the record but not its vector or text — use VDEL / TDEL too (Fixed in v1.14: DEL deletes them in every namespace); the search API is in the bundled Go client only (other languages use the text protocol), and the --net=cpp front-ends do not serve it.
Recall@10 · GloVe-100
0.953
float32, ef 256 · 100K vectors
Query p50
0.77 ms
same run · one query at a time
Over the network
24.6K QPS
20K vectors, int8, 8 clients · recall 0.894
Measured on one macOS laptop (Apple silicon), 2026-09-30: first 100K GloVe-100 word vectors, 500 queries, exact cosine ground truth, in-process (TestRealEmbeddings); network figures from vecbench with the client on the same machine. Not a comparison — no same-hardware run against Milvus, Qdrant, pgvector or any other vector database exists.