pg-smart-search
Guides

Semantic Vector Search

Integrate OpenAI or Google Gemini embeddings with pgvector for AI-powered semantic search in PostgreSQL.

Semantic Vector Search

Traditional text search relies on keyword matching. Semantic search understands the meaning behind the query. pg-smart-search integrates seamlessly with OpenAI and Google Gemini to provide vector similarity search via the pgvector PostgreSQL extension.

Prerequisites

  1. Install the pgvector extension in your PostgreSQL database.
  2. Add a vector column to your table (e.g., embedding vector(1536)).
  3. Ensure your data is embedded and stored in this column.

Configuration

Configure the engine with your preferred AI provider.

import { TrigramSearchEngine, OpenAIProvider, SearchTier } from "pg-smart-search";

const engine = new TrigramSearchEngine(adapter, {
  tableName: "articles",
  searchColumns: ["content"],
  tier: SearchTier.VECTOR,
  vectorProvider: new OpenAIProvider(
    process.env.OPENAI_API_KEY,
    "text-embedding-3-small"
  ),
});
import { TrigramSearchEngine, GeminiProvider, SearchTier } from "pg-smart-search";

const engine = new TrigramSearchEngine(adapter, {
  tableName: "articles",
  searchColumns: ["content"],
  tier: SearchTier.VECTOR,
  vectorProvider: new GeminiProvider(
    process.env.GEMINI_API_KEY,
    "embedding-001"
  ),
});

Querying

When a vector provider is configured, the engine will automatically generate embeddings for the users query and perform a similarity search alongside traditional text search.

const results = await engine.search({
  query: "How to optimize database performance",
});

Rate Limiting

AI APIs have strict rate limits. The engine includes an intelligent rate-limiting queue (p-queue) built-in. If the API returns 429 Too Many Requests, the engine automatically pauses vector search requests and retries them, preventing cascade failures.