surrealdb-vector
SurrealDB Vector Search
HNSW Index
Create a basic HNSW index:
DEFINE INDEX hnsw_idx ON pts FIELDS point HNSW DIMENSION 4;
With specific distance function and type:
DEFINE INDEX hnsw_idx ON pts FIELDS point HNSW DIMENSION 4 DIST EUCLIDEAN TYPE F64;
Available types: F64, F32, I64, I32, I16.
Full Table Example
DEFINE TABLE OVERWRITE document SCHEMALESS;
DEFINE FIELD OVERWRITE embedding ON document TYPE array<float>;
DEFINE INDEX OVERWRITE hnsw_idx_document ON document
FIELDS embedding
HNSW DIMENSION 384
DIST COSINE
TYPE F32
EFC 150 M 12 M0 24;
HNSW Parameters
| Parameter | Description |
|---|---|
| DIMENSION | Vector dimensionality (must match your embeddings) |
| DIST | Distance function: COSINE, EUCLIDEAN, etc. |
| TYPE | Numeric type: F64, F32, I64, I32, I16 |
| EFC | Construction search effort (higher = better index) |
| M | Max connections per node |
| M0 | Max connections at layer 0 |
Querying Vectors
The <|K, EF|> operator performs KNN search. K is the number of results,
EF is the search effort (higher = more accurate, slower).
Recommended effort values:
40— default, good accuracy17— fast but may miss some results
Basic KNN Query
SELECT
*,
vector::distance::knn() AS dist
FROM document
WHERE embedding <|10, 40|> $vector;
vector::distance::knn() uses the distance function defined by the index.
Scored Results with Threshold
SELECT *, score
FROM (
SELECT *, (1 - vector::distance::knn()) AS score
FROM document
WHERE embedding <|20, 40|> $vector
)
WHERE score >= $threshold
ORDER BY score DESC;
More from surrealdb/agent-skills
surrealql
Generate and modify SurrealQL queries to interact with SurrealDB databases. This includes creating and retrieving records, designing and managing schemas, establishing and querying graph relationships, performing live (real-time) queries, and leveraging all unique SurrealQL features for advanced database workflows. Use this skill whenever users need to write, adapt, or troubleshoot SurrealQL statements.
52surrealdb-python
Using SurrealDB with the Python SDK, covering both client/server mode (WebSocket) and embedded mode (in-memory or file-based). Use when connecting to SurrealDB from Python, using the surrealdb Python package, running SurrealDB embedded without a server, or performing CRUD operations from Python code. Triggers: surrealdb Python, Surreal(), AsyncSurreal(), Python SDK, embedded SurrealDB, mem://, file://.
21