rabitq-gets-faster-higher-recall-lower-latency-query-time-control
Yang Cen
newsletter-june-2026
ChanChan Mao
from-messy-pdfs-to-verifiable-answers-with-liteparse-and-lancedb
Prashanth Rao
Clelia Astra Bertelli
faster-vlm-fine-tuning-with-materialized-model-features-in-lancedb
Prashanth Rao
Ayush Chaurasia
lance-blob-v2-late-materialization-for-large-binary-data-in-spark
Drew Gallardo
semantic-memory-for-hermes-agent-with-lancedb
Prashanth Rao
a-metadata-benchmark-of-lance-delta-lake-and-iceberg-on-s3
Jack Ye
scalable-feature-engineering-on-multimodal-datasets
Prashanth Rao
stable-worldmodel-a-high-performance-platform-for-reproducible-world-model-research
Ayush Chaurasia
Quentin Lhoest
Lucas Maes
Quentin Le Lidec
reproducible-data-curation-in-the-multimodal-lakehouse
Prashanth Rao
newsletter-may-2026
ChanChan Mao
newsletter-april-2026
ChanChan Mao
how-lancedb-accelerates-vector-search-at-10-billion-scale
Yang Cen
opensearch-vs-lancedb-for-vector-search-query-cost-and-infrastructure
Justin Miller
volcano-engine-autonomous-driving-data-lake-solution
Kejian Ju
unifying-the-av-ml-stack-lancedb
Ayush Chaurasia
lance-json-support-why-you-might-not-really-need-variant
Jack Ye
building-a-storage-format-for-the-next-era-of-biology
Pavan Ramkumar
newsletter-march-2026
ChanChan Mao
smart-parsing-meets-sharp-retrieval-combining-liteparse-and-lancedb
Clelia Astra Bertelli
Prashanth Rao
lance-format-v2-2-benchmarks-half-the-storage-none-of-the-slowdown
Xuanwo
make-your-sql-workflows-multimodal-with-lancedb-x-duckdb
Prashanth Rao
agentic-coding-as-community-stewardship
Xuanwo
what-we-mean-by-multimodal
Prashanth Rao
ai-native-development-local-continue-lancedb
Ty Dunn
lance-file-format-2-2-taming-complex-data
Xuanwo
lance-blob-v2
Xuanwo
Jack Ye
openclaw-lancedb-memory-layer
Xuanwo
Prashanth Rao
openclaw-lancedb-seed2
LanceDB
openclaw-memory-from-zero-to-lancedb-pro
Prashanth Rao
upload-lance-datasets-to-hf-hub
Prashanth Rao
zero-shot-image-classification-with-vector-search
Vipul Maheshwari
werides-data-platform-transformation-how-lancedb-fuels-model-development-velocity
Qian Zhu
Fei Chen
training-a-variational-autoencoder-from-scratch-with-the-lance-file-format
LanceDB
track-ai-trends-crewai-agents-rag
LanceDB
tokens-per-second-is-not-all-you-need
Mingran Wang
Tan Li
the-future-of-open-source-table-formats-iceberg-and-lance
Jack Ye
the-case-for-random-access-i-o
LanceDB
series-a-funding
Chang She
semanticdotart
Ayush Chaurasia
second-dinners-secret-weapon-lancedb-powered-rag-for-faster-smarter-game-development
Qian Zhu
search-within-an-image-331b54e4285e
Kaushal Choudhary
scalable-computer-vision-with-lancedb-voxel51-d8b65066d5f6
LanceDB
rethinking-table-file-paths-lance-multi-base-layout
Jack Ye
rag-isnt-one-size-fits-all
Leonard Marcq
python-package-to-convert-image-datasets-to-lance-type
Vipul Maheshwari
one-million-iops
Weston Pace
november-feature-roundup
Will Jones
newsletter-september-2025
Jasmine Wang
newsletter-october-2025
Jasmine Wang
newsletter-november-2025
ChanChan Mao
newsletter-june-2025
David Myriel
newsletter-july-2025
Jasmine Wang
newsletter-january-2026
ChanChan Mao
newsletter-february-2026
ChanChan Mao
newsletter-december-2025
ChanChan Mao
newsletter-august-2025
Jasmine Wang
my-summer-internship-experience-at-lancedb-2
Raunak Sinha
my-simd-is-faster-than-yours-fb2989bf25e7
LanceDB
multimodal-myntra-fashion-search-engine-using-lancedb
LanceDB
multimodal-lakehouse
David Myriel
multi-document-agentic-rag-a-walkthrough
Vipul Maheshwari
modified-rag-parent-document-bigger-chunk-retriever-62b3d1e79bc6
Mahesh Deshwal
memgpt-os-inspired-llms-that-manage-their-own-memory-793d6eed417e
Ayush Chaurasia
late-interaction-efficient-multi-modal-retrievers-need-more-than-just-a-vector-index
Ayush Chaurasia
lancedb-x-continue
LanceDB
lance-x-huggingface-a-new-era-of-sharing-multimodal-data
Prashanth Rao
Quentin Lhoest
Xuanwo
Ayush Chaurasia
lance-x-duckdb-sql-retrieval-on-the-multimodal-lakehouse-format
Xuanwo
lance-windows-windows-lance
Chang She
lance-v2
Weston Pace
lance-namespace-lancedb-and-ray
Jack Ye
lance-file-2-1-stable
Weston Pace
lance-file-2-1-smaller-and-simpler
Weston Pace
lance-data-viewer
Gordon Murray
lance-community-governance
Jack Ye
introducing-lance-namespace-spark-integration
Jack Ye
implementing-corrective-rag-in-the-easiest-way-2
LanceDB
hybrid-search-rag-for-real-life-production-grade-applications-e1e727b3965a
Mahesh Deshwal
hybrid-search-combining-bm25-and-semantic-search-for-better-results-with-lan-1358038fe7e6
LanceDB
hybrid-search-and-custom-reranking-with-lancedb-4c10a6a3447e
LanceDB
how-to-reduce-hallucinations-from-llm-powered-agents-using-long-term-memory-72f262c3cc1f
Tevin Wang
guide-to-use-contextual-retrieval-and-prompt-caching-with-lancedb
LanceDB
grpo-understanding-and-fine-tuning-the-next-gen-reasoning-model-2
Mahesh Deshwal
graphrag-hierarchical-approach-to-retrieval-augmented-generation
Akash Desai
gpu-accelerated-indexing-in-lancedb-27558fa7eee5
LanceDB
geo-support
Jack Ye
geneva-twelvelabs
David Myriel
geneva-feature-engineering
Jonathan Hsieh
from-bi-to-ai-lance-and-iceberg
Jack Ye
Prashanth Rao
fluss-integration
Wayne Wang
file-readers-in-depth-parallelism-without-row-groups
Weston Pace
feature-rabitq-quantization
David Myriel
Yang Cen
feature-full-text-search
David Myriel
enhance-rag-integrate-contextual-compression-and-filtering-for-precision-a29d4a810301
Kaushal Choudhary
effortlessly-loading-and-processing-images-with-lance-a-code-walkthrough
LanceDB
designing-a-table-format-for-ml-workloads
Weston Pace
custom-dataset-for-llm-training-using-lance
LanceDB
creating-a-fintech-agent
Vipul Maheshwari
convert-any-image-dataset-to-lance
LanceDB
columnar-file-readers-in-depth-structural-encoding
Weston Pace
columnar-file-readers-in-depth-repetition-definition-levels
Weston Pace
columnar-file-readers-in-depth-compression-transparency
Weston Pace
columnar-file-readers-in-depth-column-shredding
Weston Pace
columnar-file-readers-in-depth-backpressure
Weston Pace
columnar-file-readers-in-depth-apis-and-fusion
Weston Pace
chunking-techniques-with-langchain-and-llamaindex
Prashant Kumar
chunking-analysis-which-is-the-right-chunking-approach-for-your-language
Shresth Shukla
chat-with-csv-excel-using-lancedb
LanceDB
case-study-netflix
David Myriel
case-study-dosu
Qian Zhu
Michael Ludden
case-study-cognee
David Myriel
Vasilije Markovic
case-study-coderabbit
Qian Zhu
building-rag-on-codebases-part-2
Sankalp Shubham
building-rag-on-codebases-part-1
Sankalp Shubham
branching-and-shallow-clone
Jack Ye
better-rag-with-active-retrieval-augmented-generation-flare-3b66646e2a9f
LanceDB
benchmarking-random-access-in-lance
Chang She
benchmarking-lancedb-92b01032874a-2
LanceDB
benchmarking-cohere-reranker-with-lancedb
LanceDB
anythingllms-competitive-edge-lancedb-for-seamless-rag-and-agent-workflows
Ayush Chaurasia
announcing-lance-sdk
Weston Pace
agentic-rag-using-langgraph-building-a-simple-customer-support-autonomous-agent
LanceDB
advanced-rag-precise-zero-shot-dense-retrieval-with-hyde-0946c54dfdcb
LanceDB
accelerate-vector-search-applications-using-openvino-lancedb
LanceDB
a-primer-on-text-chunking-and-its-types-a420efc96a13
Prashant Kumar
a-practical-guide-to-training-custom-rerankers
Ayush Chaurasia
a-practical-guide-to-fine-tuning-embedding-models
Ayush Chaurasia
keep-your-data-fresh-with-cocoindex-and-lancedb
Prashanth Rao
Linghua Jin

RaBitQ Gets Faster: Higher Recall, Lower Latency, Query-Time Control

July 10, 2026
Engineering

Vector search usually makes you choose where to pay: lower latency, higher recall, a smaller memory footprint, or fewer index rebuilds. Improving one tends to cost you another. The latest RaBitQ improvements in LanceDB shift that tradeoff in your favor: IVF_RQ can now deliver much higher recall than IVF_PQ, and it does so without falling back to the slow, memory-hungry step that high-recall search has usually depended on.

In case you’re new to RaBitQ, here’s the quick background. To keep vector search fast and memory-light, LanceDB stores compressed (quantized) copies of your vectors instead of the full-precision originals. Compression saves a lot of space, but it loses some detail, so to hit high recall you’d typically add a refine step: re-check the top candidates against the original full-precision vectors to fix up the ranking. That works, but it means keeping those bulky raw vectors close to the search path, which costs memory and adds latency.

In this post, we describe the latest improvements to RaBitQ that let IVF_RQ reach high recall using richer compressed codes on their own, so most queries never need that refine step at all.

In our single-core benchmark with top-k=10, nprobes=24, and no raw-vector refine, multi-bit IVF_RQ reaches up to 96.8% recall@10 (that is, it recovers nearly 97% of the exact-search top 10 results), with up to 3.3x higher QPS per core and up to 3.1x lower p99 latency than IVF_PQ without refine.

p99 latency comparison
QPS per core comparison

Index Recall@10 Avg latency p99 latency QPS/core
IVF_PQ, no refine 74.8% 12.8 ms 14.7 ms 78.0
IVF_RQ, 3-bit 93.5% 3.8 ms 4.7 ms 261.0
IVF_RQ, 5-bit 96.2% 4.6 ms 5.6 ms 218.1
IVF_RQ, 7-bit 96.8% 5.0 ms 5.9 ms 200.7

A quick note on the numbers: QPS here is QPS per core, not total system throughput. We’re isolating the single-core search path, not describing the maximum throughput of a full LanceDB deployment.

The story is bigger than speed alone, though. IVF_RQ moves the whole operating point: 5-bit IVF_RQ reaches 96.2% recall@10 at about 2.6x lower p99 latency than unrefined IVF_PQ, and the 5-bit and 7-bit variants improve recall by 21.4 and 22.0 points respectively. Higher recall and lower latency at the same time, from the same compressed index.

Why This Matters

Most production embedding models are high-dimensional, and raw f32 vectors are large even before you account for metadata, payload columns, and index overhead. At production scale, keeping those raw vectors in the hot search path gets expensive.

IVF_PQ is compact and useful, but reaching high recall often depends on a refine step: search the compressed PQ index, fetch extra candidates, and rerank them against the original full-precision vectors. Refine recovers quality, but the raw vectors are large, and keeping them around adds memory, I/O, and tail-latency pressure.

IVF_RQ takes a different path. Multi-bit RaBitQ preserves more distance information in the quantized index itself, so LanceDB can rerank with those compact multi-bit codes and reach high recall without depending on raw full-precision vectors for every high-recall query.

Recall comparison: IVF_PQ vs. IVF_RQ

The memory tradeoff is worth spelling out. A 5-bit IVF_RQ index stores more quantized code data than a 1-bit path or a small PQ code, so it isn’t automatically the smallest index on disk. The advantage shows up when you ask for high recall: IVF_PQ often needs raw vectors for refine to reach similar recall, while IVF_RQ can spend a few more compact bits inside the index and avoid keeping those raw vectors hot.

Hot serving memory comparison: IVF_PQ vs. IVF_RQ
Serving path What needs to be hot Relative hot vector memory
IVF_PQ, no refine PQ codes only ~1/32 raw vectors
5-bit IVF_RQ, approx_mode="fast" 1-bit RaBitQ search path ~1/32 raw vectors
5-bit IVF_RQ, multi-bit scoring 5-bit RaBitQ codes ~5/32 raw vectors
IVF_PQ + refine PQ codes plus raw vectors ~33/32 raw vectors

There’s a useful nuance here. Because approx_mode exists, a 5-bit IVF_RQ index can theoretically search using only the 1-bit path in fast mode. In that case, hot search memory can match a 1-bit or no-refine PQ setup. The same index can then draw on its extra stored bits for higher recall when a query needs it.

What Changed Under the Hood

RaBitQ isn’t new to LanceDB, but this update makes it far more practical for high-recall serving. The following four pieces matter the most.

Fast Rotation

RaBitQ rotates vectors before quantization so that information spreads more evenly across dimensions. A naive dense rotation can get expensive on modern high-dimensional embeddings, so LanceDB uses a fast rotation path that cuts that setup cost. Queries get prepared for RaBitQ scoring without rotation becoming the bottleneck.

The upshot for users: IVF_RQ stays fast on the embedding sizes people actually deploy.

Multi-Bit Reranking

Classic one-bit RaBitQ is extremely compact. Multi-bit RaBitQ keeps more information per dimension, which gives the index a closer approximation of the original vector, and LanceDB uses those extra bits to rerank candidates inside the compressed index.

That’s why the 3-bit, 5-bit, and 7-bit rows look so different from the PQ no-refine row. The index itself holds enough distance information to sharply improve recall, without forcing every query into raw-vector refinement.

SIMD Kernels

The hot path in vector search is scoring many candidate vectors quickly. LanceDB added SIMD kernels for RaBitQ scoring so CPUs can chew through packed quantized data efficiently. This is the kind of improvement you shouldn’t have to think about: upgrade the engine, keep the same table and search model, and the inner loop just gets faster.

A Fast One-Bit Path

The last piece is the one-bit path. Even when an index stores more than one bit per dimension, LanceDB can fall back to a cheaper path when a query is latency-sensitive. This is what makes the memory story above work: one 5-bit index can serve both a low-latency path and a higher-recall path.

Tune Recall at Query Time

The new user-facing control is approx_mode. Instead of rebuilding indexes for every product requirement, you build one IVF_RQ index and pick the recall/performance point at query time.

approx_mode What it optimizes for Good fit
fast Lowest latency and the 1-bit hot path autocomplete, previews, broad exploration
normal Balanced recall and latency default production search
accurate Higher recall RAG retrieval, evaluation, quality-sensitive queries

On the same 5-bit IVF_RQ index, approx_mode moves along the speed/quality curve without rebuilding the index:

approx_mode latency comparison
approx_mode QPS comparison
approx_mode Recall@10 Avg latency Approx QPS/core
fast 81.4% 3.2 ms 315
normal 96.1% 3.8 ms 263
accurate 96.6% 4.5 ms 222

The approximate QPS/core values above are derived from average latency as 1000 / avg_latency_ms in the same single-core benchmark. Treat them as a relative comparison between modes, not as cluster throughput.

This flexibility pays off in real applications. A UI can use fast while a user is typing, the main search endpoint can use normal, and a more latency-forgiving RAG context-retrieval step can use accurate, all against the same index.

One practical boundary is worth calling out: approx_mode selects among the scoring paths supported by the index you already built. A 5-bit IVF_RQ index can use the 1-bit fast path or spend more stored bits for higher recall, but it’s not a substitute for measuring recall on your own data, and it won’t turn one index into every possible bit width.

Available Across OSS, Cloud, and Enterprise

These RaBitQ improvements live in the open source Lance and LanceDB Rust crates, so they’re available wherever you may be running LanceDB: the embedded open-source library, Cloud, and Enterprise. If you’re working with high-dimensional embeddings and currently rely on IVF_PQ, try the new path and create an IVF_RQ index. Here’s how that looks for LanceDB Enterprise users.

import lancedb
from lancedb.index import IvfRq

# Connect to a remote table on LanceDB Enterprise
db = lancedb.connect(
    uri="db://your-project",
    api_key="YOUR_API_KEY",
    region="us-east-1",
    host_override="https://<your-user>@<hostname>@<your-endpoint>",
)
table = db.open_table("documents")

table.create_index(
    "vector",
    config=IvfRq(
        distance_type="cosine",
        num_bits=5,
    ),
    replace=True,
)

In these benchmarks, num_bits=5 was the balanced starting point, delivering 96.2% recall@10 with lower p99 latency and higher QPS/core than 7-bit RQ. Measure on your own workload, then use approx_mode to tune individual query paths. The practical payoff is that one compact RaBitQ index covers more of the speed/recall curve, so you make fewer raw-vector refine trips and rebuild the index less often as your product’s needs change.

Want to try it yourself? Grab the latest version of LanceDB (pip install lancedb) and check out our GitHub repo. Store your embeddings in LanceDB, and see where IVF_RQ lands on your recall and latency numbers. We'd love to hear about it!

Yang Cen
Software Engineer @ LanceDB

RaBitQ Gets Faster: Higher Recall, Lower Latency, Query-Time Control

Yang Cen
July 9, 2026
rabitq-gets-faster-higher-recall-lower-latency-query-time-control

📊 Lance vs Delta vs Iceberg, 🔗 Lance Blob V2 Late Materialization, 🤖 Stable-Worldmodel Research Platform

ChanChan Mao
July 7, 2026
newsletter-june-2026

From Messy PDFs to Verifiable Answers with LiteParse and LanceDB

Prashanth Rao
Clelia Astra Bertelli
July 2, 2026
from-messy-pdfs-to-verifiable-answers-with-liteparse-and-lancedb