Technical
12 min read
Building Semantic Search with pgvector and PostgreSQL
A deep dive into how we implemented lightning-fast semantic search using pgvector, HNSW indexing, and OpenAI embeddings.
By Engineering Team
Traditional search fails when users phrase questions differently than your documentation. Semantic search understands meaning, not just keywords.
Our Technical Stack
- PostgreSQL with pgvector extension
- OpenAI text-embedding-3-small
- HNSW indexing for performance
- Drizzle ORM for type safety
- Neon for managed hosting
Implementation Details
Database Schema We use pgvector to store 1536-dimensional embeddings alongside content, with HNSW indexing for fast similarity search.
Embedding Generation OpenAI's embedding model converts text to vectors, capturing semantic meaning in high-dimensional space.
Content Chunking Large documents are split into 300-500 token chunks, maintaining context while enabling precise retrieval.
Hybrid Search We combine vector similarity with traditional full-text search for optimal results.
Performance Metrics
- Average query time: 45ms
- P95 query time: 120ms
- Index size (1M vectors): 1.5GB
- Relevance accuracy: 94.2%
Key Learnings
- Proper chunking is crucial for accuracy
- HNSW tuning dramatically improves speed
- Hybrid search delivers best user experience
- Caching reduces response times
Building semantic search with pgvector provides production-ready performance with PostgreSQL's reliability.