Search over massive collections of vectors can be slow. HNSW (Hierarchical Navigable Small World) is an algorithm that significantly accelerates vector search times.

Basic Usage

An HNSW index can be created over any column with the vector or sparsevec type.

CREATE INDEX ON <schema_name>.<table_name>
USING hnsw (<column_name> <distance_metric>);
table_name
required

The name of the table being indexed.

column_name
required

The name of the column being indexed. Must be of type vector.

distance_metric
required

The distance metric used for measuring similarity between two vectors. For the vector data type, use vector_l2_ops for L2 distance, vector_ip_ops for inner product, and vector_cosine_ops for cosine distance. For the sparsevec data type, use sparsevec_l2_ops for L2 distance, sparsevec_ip_ops for inner product, and sparsevec_cosine_ops for cosine distance.

schema_name

The name of the schema, or namespace, of the table. If not provided, the search path is used as a default.

Index Options

The following example demonstrates how to pass options when creating the HNSW index:

CREATE INDEX ON <schema_name>.<table_name>
USING hnsw (<column_name> <distance_metric>)
WITH (m = 16, ef_construction = 64);
m
default: 16

The maximum number of connections per layer. A higher value increases recall but also increases index size and construction time.

ef_construction
default: 64

A higher value creates a higher quality graph, which increases recall but also construction time.