Creating a Sparse HNSW Index

An HNSW index can be created over any column with the sparsevec type. Sparse vectors with up to 1,000 nonzero dimensions can be indexed.

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

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

table_name
required

The name of the table being indexed.

column_name
required

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

distance_metric
required

The distance metric used for measuring similarity between two vectors. Use sparsevec_l2_ops for L2 distance, sparsevec_ip_ops for inner product, and sparsevec_cosine_ops for cosine distance.

Index Options

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

CREATE INDEX ON mock_items
USING hnsw (sparse_embedding sparsevec_l2_ops)
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.

Deleting a Sparse HNSW Index

The following command deletes a sparse HNSW index:

DROP INDEX <index_name>;
index_name
required

The name of the index you wish to delete.

Recreating a Sparse HNSW Index

A sparse HNSW index only needs to be recreated if the name of the indexed column changes. To recreate the index, simply delete and create it using the SQL commands above.