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.