Skip to main content
You declare indexes once, at table creation, with an IndexSpec. Two index types, chained fluently. Declare both on a table to enable hybrid search. Scalar columns need no index; filter them with SQL.

Full-text index: fts(column)

Builds a BM25 inverted index over a text column, powering bm25_search, token_match, and the hybrid / pushdown-filter paths. Call fts once per text column you want to search.

Vector index: vector(column, dim, metric)

Builds an IVF (inverted-file) vector index for kNN. Partitioning is automatic. The engine derives the IVF partition (centroid) count from the data when the index is built, and it calibrates probe width and rerank budget per table and per k at query time. There are no partition or probe knobs to set, and the same declaration works from thousands of rows to hundreds of millions.
You can index multiple text columns (call fts per column) and multiple vector columns. Scalar columns need no index declaration. Filter them with SQL (query_sql) or as a pushdown pre-filter on vector search (see Search).

See also

Last modified on August 14, 2026