home

pg_textsearch: BM25‑Ranking und Hybrid‑Suche in PostgreSQL

Key Takeaway

pg_textsearch erweitert PostgreSQL um moderne BM25‑Ranking‑Logik und hybride Suche, sodass KI‑Anwendungen wie Retrieval‑Augmented Generation (RAG) präzise Keyword‑ und Vektor‑retrieval in einer einzigen Datenbank durchführen können.

Summary

Historische Evolution der Suche

  • Erster Abschnitt (Catalog‑Search): Fokus auf E‑Commerce, Inhalte; Postgres natives Full‑Text‑Search (tsvector, tsquery) genügt.
  • Zweiter Abschnitt (Operational‑Data): Log‑ und Event‑Streams; Elasticsearchähnliche Aggregationen, horizontal Skalierbarkeit.
  • Dritter Abschnitt (AI‑native): RAG, Chat‑Agenten, Agentic Workflows; Relevanz‑Qualität kritischer, semantisches Verständnis via Vektor‑Suche + Keyword‑Präzision.

Ranking‑Qualitätslücke

Postgres ts_rank fehlt IDF, Term‑Frequency‑Saturation und Normalisierung; führt zu falschen Rankings (z. B. häufig auftretende Begriffe dominieren). Beispiel: „Database connection pooling“ wird schlechter bewertet als generelles Dokument über „database“.

pg_textsearch – Lösung

  • Unterstützung von BM25‑Indexen (USING bm25(…)) und Query‑Operatoren (<@> to_bm25query(…)).
  • Modernes BM25 berücksichtigt IDF, TF‑Saturation und Dokumentlängen‑Normalisierung.
  • Einfaches SQL‑Erlebnis (CREATE EXTENSION pg_textsearch;).
  • Kompatibel mit vorhandenen PostgreSQL‑Erweiterungen: pgvector (Vektor‑Typ) und pgvectorscale (Hybridsuch).

Beispiel‑Code

Erstellung von Tabellen articles und documents.

Beispiel‑Queries für reine Texte‑Suche, Filterung nach Datum, Gruppierung, Join‑operationen.

Hybrid‑Suche: Kombination von Vektor‑Ranks (cosine) und BM25‑Ranks über gewichtete Summe im CTE‑Ansatz.

Demo‑Code für Hybrid‑Ranking mit v.rank und k.rank, Anpassbare Gewichtung (70 % Vektor, 30 % Keyword).

Implementierungsdetails

Extension basiert auf bestehenden PostgreSQL Index‑Mechanismen.

Keine zusätzliche Infrastruktur nötig – alles innerhalb eines Postgres‑Cluster.

Entworfen für „AI‑Native“ Workloads, damit LLMs hochwertige Dokumente erhalten.

Call‑to‑Action

Vorschlag, Extension als „Preview Release“ zu testen (CREATE EXTENSION pg_textsearch;).

Weiterführende Dokumentation und Beispiel‑Repos: Tiger Data Docs (pg_textsearch), pgvector GitHub, TimescaleDB / pgvectorscale GitHub.

Zusammenfassung der wichtigsten Features

  1. BM25‑Ranking im Postgres‑SQL‑Umfeld.
  2. Hybrid‑Retrieval (Vektor + Keyword).
  3. Einfaches Setup, keine externe Suche.
  4. Geeignet für RAG‑ und chatbasierte Anwendungen.
  5. Kombinierbar mit bestehenden Erweiterungen (pgvector, pgvectorscale).
  6. Beispiel‑Skripte für Datentypen, Indexierung, Queries, Joins, Grouping, CTE‑Hybrid‑Ranking.

Related queries:

Wie kann ich BM25 in PostgreSQL aktivieren?
Was ist der Unterschied zwischen ts_rank und BM25 in pg_textsearch?
Wie kombiniere ich Vektor‑ und Keyword‑Suchen in einer Abfrage?

Quelle: https://www.tigerdata.com/blog/introducing-pg_textsearch-true-bm25-ranking-hybrid-retrieval-postgres