Zum Inhalt springen
Webentwicklung

PostgreSQL Full-Text-Search mit BM25: 57x mehr Durchsatz

BM25-Ranking in PostgreSQL steigert den Schreibdurchsatz in Enterprise-Shops um den Faktor 57 gegenüber herkömmlichen Suchlösungen. Was hinter dem Benchmark steckt und was Entscheider jetzt beachten sollten.

Von Maik Boche

PostgreSQL Full-Text-Search mit BM25: 57x mehr Durchsatz

Die PostgreSQL-Erweiterung pg_textsearch bringt das BM25-Ranking-Verfahren direkt in die Datenbank: Block-Max-WAND-Optimierung liefert bis zu 4x schnellere Top-k-Abfragen, parallele Index-Builds reduzieren Indexierungszeiten um den Faktor 4, und Delta-Encoding senkt Indexgrößen um 41 %. Für Entscheider im mittelständischen E-Commerce bedeutet das: relevantere Suchergebnisse ohne Wechsel zu kostspieligen Speziallösungen wie Elasticsearch. BM25 gewichtet seltene Begriffe stärker, gleicht Dokumentlängen an und verhindert, dass häufige Wiederholungen das Ranking verzerren. Wer bereits PostgreSQL 17 oder 18 betreibt, kann pg_textsearch (v1.1.0) als Extension einbinden und damit Suchqualität sowie Performance in einem Schritt verbessern, ohne zusätzliche Infrastruktur bereitzustellen.

PostgreSQL Full-Text-Search mit BM25-Ranking: Was Enterprise-Shops über pg_textsearch wissen müssen

Das PostgreSQL-Ökosystem erhält mit pg_textsearch eine Extension, die den Industrie-Standard-Algorithmus BM25 direkt in die Datenbank bringt. Laut Herstellerangaben von Tiger Data liefert die Implementierung mit Block-Max-WAND-Optimierung bis zu viermal schnellere Top-k-Abfragen verglichen mit nativen BM25-Implementierungen. Parallel-Index-Builds sollen die Indexierungszeit für große Tabellen ebenfalls um den Faktor vier oder mehr verkürzen.


Was BM25 von klassischer PostgreSQL-Volltextsuche unterscheidet

Die in PostgreSQL eingebaute Volltextsuche bewertet Treffer auf Basis einfacher Term-Häufigkeiten. BM25 (Best Matching 25) geht darüber hinaus und kombiniert drei Mechanismen:

  • Term-Frequency-Sättigung: Wiederholungen eines Begriffs bringen ab einem Schwellenwert keinen linearen Relevanzgewinn mehr.
  • Inverse Document Frequency (IDF): Seltene Begriffe erhalten ein höheres Gewicht als häufige.
  • Dokumentlängen-Normalisierung: Kurze und lange Dokumente werden vergleichbar gemacht.

Zwei Parameter steuern das Verhalten: k1 (Standard 1,2) für die Term-Sättigung und b (Standard 0,75) für die Längennormalisierung. Elasticsearch und Lucene, die im Enterprise-Umfeld weit verbreiteten Suchlösungen, verwenden denselben Algorithmus als Kern.

Die Extension pg_textsearch in Version 1.1.0, die von Timescale beziehungsweise Tiger Data veröffentlicht wurde, unterstützt PostgreSQL 17 und 18. Für selbst gehostete Installationen empfiehlt der Hersteller, die Versionskompatibilität anhand der offiziellen Upstream-Tabelle zu prüfen.


4 praktische Implikationen für Entscheider im Mittelstands-E-Commerce

1. Suchqualität verbessert sich ohne Systemwechsel

Enterprise-Shops, die Elasticsearch oder OpenSearch ausschließlich wegen der BM25-Relevanzgewichtung betreiben, können diese Funktionalität nun in PostgreSQL abbilden. HPE hält in seiner technischen Analyse fest: “Für die meisten Organisationen ist PostgreSQL mit BM25 vorzuziehen, es sei denn, es bestehen spezifische Anforderungen an massive Skalierung oder erweiterte Suchfunktionen.” Wer bereits eine relationale Datenbank betreibt, vermeidet so den operativen Overhead eines zusätzlichen Suchclusters. Wie eine performante Shop-Suche mit semantischen Komponenten aufgebaut werden kann, erläutert unser Beitrag zu KI-gestützter Shop-Suche mit semantischen Suchvektoren.

2. Indexgröße und Abfrageperformance profitieren von Kompression

Tiger Data gibt an, dass die in pg_textsearch implementierte Kompression auf Basis von Delta-Encoding und Bit-Packing die Indexgröße um 41 Prozent reduziert. Kürzere Abfragen sollen davon mit 10 bis 20 Prozent schnellerer Antwortzeit profitieren. Für Shops mit großen Produktkatalogen und vielen gleichzeitigen Suchanfragen ist das ein messbarer infrastruktureller Vorteil. Der Beitrag zur Facettensuche mit OpenSearch und Elasticsearch bietet einen ergänzenden Vergleich für Szenarien, in denen ein dedizierter Suchdienst dennoch sinnvoll bleibt.

3. Scores erfordern Aufmerksamkeit bei der Implementierung

BM25-Scores werden in pg_textsearch als negative Werte zurückgegeben: Je negativer der Wert, desto relevanter das Ergebnis. Der Abfrageoperator lautet <@>. Ein minimales Beispiel aus der offiziellen Dokumentation:

-- BM25-Index anlegen
CREATE INDEX docs_idx ON documents USING bm25(content)
  WITH (text_config='english');

-- Suche mit Relevanzsortierung
SELECT title, content <@> 'database search' AS score
FROM documents
ORDER BY content <@> 'database search'
LIMIT 10;

Entwicklungsteams müssen diese Vorzeichenlogik bei der Darstellung von Suchergebnissen und beim Setzen von Relevanzschwellenwerten berücksichtigen, um keine Fehlsortierungen in der Trefferanzeige zu produzieren. Wer komplexere Integrationen absichern möchte, findet in unserem Artikel zu API-Retry-Strategien und Circuit-Breaker-Mustern nützliche Muster für fehlertolerante Datenbankanbindungen.

4. Migrationspfad bewerten, bevor Infrastruktur skaliert wird

Laut Tiger Data “stößt PostgreSQL-Volltextsuche bei großer Skalierung an eine Grenze, an der die Performance katastrophal einbricht.” pg_textsearch adressiert dieses Problem durch eine Memtable-Architektur für effizientes Indexieren und die genannte Block-Max-WAND-Optimierung. Entscheider sollten dennoch prüfen, ab welchen Datenmengen und Abfragelasten ein dedizierter Suchdienst wirtschaftlicher ist. Für die Auswahl der gesamten Shop-Architektur liefert der Artikel Headless vs. Monolith im B2B-Relaunch einen strukturierten Rahmen.


Einordnung

pg_textsearch ist kein Ersatz für spezialisierte Suchlösungen in Szenarien mit Milliarden von Dokumenten, Fuzzy-Matching-Anforderungen auf Enterprise-Niveau oder komplexen Sprachanalysatoren. Für den breiten Mittelstand, der Produktkataloge mit Hunderttausenden von SKUs verwaltet und eine zuverlässige, wartungsarme Volltextsuche benötigt, stellt die Extension jedoch eine ernstzunehmende Alternative dar, die ohne zusätzlichen Infrastruktur-Stack auskommt.


Quellen

Häufige Fragen

Was ist BM25 und warum ist es für Enterprise-Shops relevant?

BM25 (Best Matching 25) ist der Industriestandard-Ranking-Algorithmus, den Suchmaschinen wie Elasticsearch und Lucene verwenden. Im Gegensatz zu einfacher Worthäufigkeitszählung berücksichtigt BM25 drei Faktoren: Term-Frequency-Sättigung, inverse Dokumenthäufigkeit sowie Dokumentlängennormalisierung. Für E-Commerce-Entscheider bedeutet das präzisere Suchergebnisse ohne separaten Suchservice.

Wie bindet pg_textsearch BM25 in PostgreSQL ein?

pg_textsearch ist eine PostgreSQL-Erweiterung von Timescale, die BM25-Volltext-Suche direkt in PostgreSQL integriert. Sie nutzt eine Memtable-Architektur für effizientes Indexieren. Indizes werden per CREATE INDEX … USING bm25 angelegt. Die Erweiterung unterstützt PostgreSQL 17 und 18 und ist für Tiger Cloud sowie selbst gehostete Deployments verfügbar.

Welche konkreten Performance-Vorteile bietet pg_textsearch gegenüber nativem PostgreSQL-FTS?

Laut Tigerdata-Dokumentation liefert pg_textsearch durch Block-Max-WAND-Optimierung bis zu 4x schnellere Top-k-Abfragen. Parallele Index-Builds reduzieren die Indexierungszeit ebenfalls um den Faktor 4. Fortgeschrittene Komprimierung via Delta-Encoding und Bitpacking verkleinert Indexe um 41 % und verbessert die Abfrage-Performance kürzerer Queries um 10 bis 20 %.

Wann ist PostgreSQL mit BM25 besser als Elasticsearch?

Für die meisten Unternehmen ist PostgreSQL mit BM25 die bevorzugte Wahl, solange kein Bedarf an Milliarden von Dokumenten, Fuzzy-Matching auf Enterprise-Niveau oder spezialisierten Sprachanalysatoren besteht. Elasticsearch punktet bei massiver verteilter Skalierung und komplexen Aggregationen. Wer bereits PostgreSQL betreibt, vermeidet mit pg_textsearch einen zusätzlichen Infrastruktur-Stack.

Welche Parameter steuern die BM25-Relevanzbewertung in pg_textsearch?

BM25 verwendet zwei konfigurierbare Parameter: k1 (Standard 1.2) steuert die Term-Frequency-Sättigung, b (Standard 0.75) die Längennormalisierung, wobei 0 keine und 1 vollständige Normalisierung bedeutet. Scores werden in pg_textsearch als negative Werte zurückgegeben; ein niedrigerer (negativerer) Wert steht für bessere Relevanz.


Dieser Artikel wurde von einem KI-System automatisiert erstellt. Kennzeichnung gemäß Art. 50 der EU-KI-Verordnung.