VectorChord#
VectorChord is a high-performance Postgres extension for dense vector search. It extends pgvector with index types that are faster and more memory-efficient at scale, making it well-suited for knowledge bases containing millions or billions of embeddings.
For installation and full technical reference, see VectorChord in pg_extensions .
When to use VectorChord#
Standard pgvector HNSW and IVFFlat indexes work well for most workloads. VectorChord becomes the better choice when:
Your knowledge base contains millions or billions of embeddings and HNSW indexes are consuming too much RAM.
You need lower query latency at high throughput.
Your embeddings have high dimensionality (above the 2000-dimension limit supported by pgvector’s HNSW index).
Index types#
VectorChord provides two index types, both configurable through the Vector index config helpers .
chord_hnsw#
A VectorChord implementation of HNSW with granular control over graph connectivity and search depth. Use this as a drop-in upgrade from pgvector’s HNSW when you need more tuning control or better performance at scale.
Configure with aidb.vector_index_chord_hnsw_config() :
Parameter |
Description |
|---|---|
m |
Maximum connections per node in the graph (default: 16). |
ef_construction |
Search depth during index build (default: 64). |
max_connections |
Hard cap on graph connections. |
ml |
Level multiplier controlling the graph layer structure. |
vector_data_type |
Vector storage type (e.g., 'float32'). |
chord_vchordq#
A quantization-based index (IVF-RaBitQ) designed for maximum throughput at very large scale. It trades a small amount of recall accuracy for significantly faster searches and lower memory usage than HNSW.
Configure with aidb.vector_index_chord_vchordq_config() :
Parameter |
Description |
|---|---|
lists |
Number of IVF clusters. Higher values increase accuracy at scale. |
spherical_centroids |
Use normalized centroids — recommended for cosine similarity. |
vector_data_type |
Vector storage type (e.g., 'float32'). |
Using VectorChord with pipelines#
VectorChord index types are configured through the vector_index
parameter of aidb.knowledge_base_config() , which is passed as
step_N_options when creating a pipeline.
Configuring a pipeline with chord_hnsw#
SELECT aidb.create_pipeline(
name => my_semantic_pipeline,
source => source_docs,
source_key_column => id,
source_data_column => content,
destination => my_knowledge_base,
step_1 => KnowledgeBase,
step_1_options => aidb.knowledge_base_config(
my_embedding_model,
Text,
distance_operator => Cosine,
vector_index => aidb.vector_index_chord_hnsw_config(
m => 16,
ef_construction => 64,
max_connections => 32
)
),
auto_processing => Live
);
Configuring a pipeline with chord_vchordq#
SELECT aidb.create_pipeline(
name => my_large_scale_pipeline,
source => billion_scale_docs,
source_key_column => id,
source_data_column => content,
destination => my_large_kb,
step_1 => KnowledgeBase,
step_1_options => aidb.knowledge_base_config(
my_embedding_model,
Text,
distance_operator => Cosine,
vector_index => aidb.vector_index_chord_vchordq_config(
lists => 1000,
spherical_centroids => true
)
),
auto_processing => Background,
background_sync_interval => 60 seconds
);
Multi-step pipeline with chunking and VectorChord#
For document pipelines, chunk text first and then embed into a VectorChord-indexed knowledge base:
SELECT aidb.create_pipeline(
name => doc_pipeline_vchord,
source => raw_documents,
source_key_column => id,
source_data_column => body,
destination => doc_knowledge_base,
step_1 => ChunkText,
step_1_options => aidb.chunk_text_config(200, 250, 25, words),
step_2 => KnowledgeBase,
step_2_options => aidb.knowledge_base_config(
my_embedding_model,
Text,
vector_index => aidb.vector_index_chord_hnsw_config(
m => 32,
ef_construction => 128
)
),
auto_processing => Live
);
Choosing between index types#
Scenario |
Recommended index |
|---|---|
Up to ~10M vectors, general use |
chord_hnsw |
100M+ vectors, memory-constrained |
chord_vchordq |
High-dimensional embeddings (>2000 dims) |
chord_vchordq |
Cosine similarity with normalized vectors |
chord_vchordq with spherical_centroids => true |
Drop-in pgvector HNSW replacement |
chord_hnsw |
Further reading#
VectorChord documentation — installation, index reference, and release notes
Vector index config helpers — full parameter reference for all index config functions
Hybrid search — combining VectorChord dense search with BM25 keyword search