The store for your embeddings and similarity search, with metadata filtering: pgvector, Qdrant, Weaviate, Pinecone, Chroma, and Milvus, and how to choose between them.
What it is
A vector database holds your embeddings and answers similarity queries, usually with metadata filtering so you can scope a search to a tenant, date range, or document type. The field is crowded: pgvector, Qdrant, Weaviate, Pinecone, Chroma, and Milvus each make a different bet on ops, scale, and features. They all do the same core job; the choice is about how much operational weight you want to carry and what you need beyond plain top-k.
The one job
Given a query embedding, retrieve the k nearest stored vectors quickly, with metadata filtering to narrow the candidate set. Everything else, the connectors, the dashboards, the managed hosting, is packaging around that one operation.
How to choose
Skip it when
A minimal look
-- store: an embedding column beside your normal rows
-- query: order by cosine distance to the query vector
SELECT id, content
FROM chunks
WHERE tenant_id = 'acme' -- metadata filtering
ORDER BY embedding <=> '[query_vector]' -- <=> is cosine distance
LIMIT 5; -- the k most similar
The principle it teaches
The embedding model affects retrieval quality more than the database choice. Prefer the boring default, pgvector, until you have a concrete reason to move: a scale ceiling, a hybrid-search need, or an ops constraint you can name.
Where it fits your labs
This is a Week 2 tool. Lab 2 stores its chunks in pgvector so you feel how retrieval works before reaching for a managed service, and so the database is one variable you can hold steady while you tune the parts that matter more.