Hybrid Retrieval: BM25 + Vektor

BM25 (klassische Volltextsuche) und Vektor-Suche haben unterschiedliche Stärken: BM25 ist Trumpf bei exakten Treffern (Eigennamen, Fachbegriffen), Vektor-Suche bei Synonymen und Paraphrasierungen. Best practice ist, beide parallel laufen zu lassen und die Ergebnislisten mit Reciprocal Rank Fusion (RRF) zu mischen.

BM25 (Volltext)
  1. pgvector mit Postgres 16 betreiben
    Score 0.92 · Exakter Treffer im Titel
  2. Einführung in Vektor-Datenbanken
    Score 0.18 · Verwandtes Thema, schwacher Match
Vektor (Embeddings)
  1. pgvector mit Postgres 16 betreiben
    Score 0.88 · Semantisch direkt
  2. Einführung in Vektor-Datenbanken
    Score 0.71 · Vektor-DBs sind ähnlich
  3. HNSW-Index in Faiss konfigurieren
    Score 0.65 · Index-Konfiguration verwandt
  4. Wie ANN-Algorithmen funktionieren
    Score 0.58 · ANN-Algorithmen relevant
Nach RRF-Fusion:
  1. D2 pgvector mit Postgres 16 betreiben (rrf 0.0328)
  2. D1 Einführung in Vektor-Datenbanken (rrf 0.0323)
  3. D5 HNSW-Index in Faiss konfigurieren (rrf 0.0159)
  4. D4 Wie ANN-Algorithmen funktionieren (rrf 0.0156)
Warum eigentlich?Warum gerade RRF, nicht Score-Addition?
BM25 und Vektor-Scores leben in völlig unterschiedlichen Skalen — BM25 kann unbeschränkt nach oben gehen, Cosine ist 0–1. Direkte Addition ergibt Quatsch. RRF nimmt nur die Ränge (nicht die Scores) und addiert 1 / (k + rank). Das macht beide Listen skalierungsfrei vergleichbar.
Häufiger DenkfehlerNur Vektor reicht — angeblich
Klassische Falle: man baut eine glänzende Vektor-Pipeline, ignoriert BM25 als „alt“, und dann sucht der User nach „PostgreSQL 17“ und findet alles über „Datenbanken allgemein“ — aber nicht die spezifische Version. BM25 fängt diese exakten Token-Treffer zuverlässig.
Tiefer reinSparse + Dense in einem Index
Pinecone, Qdrant und Weaviate unterstützen Sparse-Dense Hybrid: BM25 wird als sparser Vektor (Token-IDs als Indizes, TF-IDF-Werte als Magnituden) in derselben DB gespeichert wie der dichte Embedding-Vektor. Die Suche fusioniert beide in einer einzigen Query — schneller als zwei separate Round-Trips. Stichwort: SPLADE für gelernte Sparse-Repräsentationen.