Skip to content

Vector Workloads

Use FLOAT_VECTOR columns for semantic retrieval and nearest-neighbor search.

Create table

CREATE TABLE IF NOT EXISTS doc.documents (
  id TEXT PRIMARY KEY,
  content TEXT,
  embedding FLOAT_VECTOR(4) WITH (similarity = 'cosine')
);

Upsert sample vectors

INSERT INTO doc.documents (id, content, embedding)
VALUES
  ('doc_1', 'MonkDB is great for time-series and vector workloads.', [0.91,0.07,0.01,0.22]),
  ('doc_2', 'Vector search in databases is important for AI applications.', [0.11,0.80,0.05,0.33]),
  ('doc_3', 'MonkDB provides scalable distributed storage.', [0.84,0.10,0.02,0.18])
ON CONFLICT (id) DO UPDATE
SET content = excluded.content,
    embedding = excluded.embedding;

REFRESH TABLE doc.documents;

KNN query

WITH q AS (SELECT [0.10,0.79,0.06,0.30]::float_vector(4) AS v)
SELECT id, content, _score
FROM doc.documents
WHERE KNN_MATCH(embedding, (SELECT v FROM q), 2)
ORDER BY _score DESC;

Similarity scoring query

WITH q AS (SELECT [0.10,0.79,0.06,0.30]::float_vector(4) AS v)
SELECT id,
       VECTOR_SIMILARITY(embedding, (SELECT v FROM q)) AS score
FROM doc.documents
ORDER BY score DESC
LIMIT 3;

Similarity override (must match column similarity)

WITH q AS (SELECT [0.10,0.79,0.06,0.30]::float_vector(4) AS v)
SELECT id,
       VECTOR_SIMILARITY(embedding, (SELECT v FROM q), 'cosine') AS score
FROM doc.documents
WHERE KNN_MATCH(embedding, (SELECT v FROM q), 2, 'cosine')
ORDER BY score DESC;