Pgvector Semantic Search
Use this skill for setting up vector similarity search with pgvector for AI/ML...
Install
npx skills add timescale/pg-aiguide --skill pgvector-semantic-search -g -a claude-code -y- Repository
- timescale/pg-aiguide1.9k
- Category
- Data and ML
- Updated
- 8d ago
- License
- Apache-2.0
- Context cost
- Mediumabout 3,000 tokens
- Runs scripts
- No, instructions only
What it does
Use this skill for setting up vector similarity search with pgvector for AI/ML embeddings, RAG applications, or semantic search. **Trigger when user asks to:** - Store or search vector embeddings in PostgreSQL - Set up semantic search, similarity search, or nearest neighbor search - Create HNSW or IVFFlat indexes for vectors - Implement RAG (Retrieval Augmented Generation) with PostgreSQL - Optimize pgvector performance, recall, or memory usage - Use binary quantization for large vector datasets **Keywords:** pgvector, embeddings, semantic search, vector similarity, HNSW, IVFFlat, halfvec, cosine distance, nearest neighbor, RAG, LLM, AI search Covers: halfvec storage, HNSW index configuration (m, ef_construction, ef_search), quantization strategies, filtered search, bulk loading, and performance tuning.
pgvector for Semantic Search
Semantic search finds content by meaning rather than exact keywords. An embedding model converts text into high-dimensional vectors, where similar meanings map to nearby points. pgvector stores these vectors in PostgreSQL and uses approximate nearest neighbor (ANN) indexes to find the closest matches quickly, scaling to millions of rows without leaving the database. Store your text alongside its embedding, then query by converting your search text to a vector and returning the rows with the smallest distance.
This guide covers pgvector setup and tuning, not embedding model selection or text chunking, which significantly affect search quality. Requires pgvector 0.8.0+ for all features (halfvec, binary_quantize, iterative scan).
Golden Path (Default Setup)
Use this configuration unless you have a specific reason not to.
- Embedding column data type:
halfvec(N)whereNis your embedding dimension (must match everywhere). Examples use 1536; replace with your dimensionN. - Distance: cosine (
<=>) - Index: HNSW (
m = 16,ef_construction = 64). Usehalfvec_cosine_opsand query with<=>. - Query-time recall:
SET hnsw.ef_search = 100(good starting point from published benchmarks, increase for higher recall at higher latency) - Query pattern:
ORDER BY embedding <=> $1::halfvec(N) LIMIT k
This setup provides a strong speed, recall tradeoff for most text-embedding workloads.
