Skip to content
BotServBotServ
RAGHybrid SearchBM25Dense RetrievalKeyword SearchVektorLokale KI

Hybrid Search: Semantisch und lexikalisch kombinieren

Was ist Hybrid Search bei RAG? Kombination aus Vektor- und Keyword-Suche für bessere Ergebnisse. BM25, Dense Retrieval und Fusion erklärt.

S

schutzgeist

12 min read
Hybrid Search: Vektor- und Keyword-Suche kombiniert

Hybrid Search: Semantisch und lexikalisch kombinieren

Was dieser Artikel über Hybrid Search behandelt

  • Du verstehst, was Hybrid Search ist und warum sie für RAG-Systeme wichtig ist
  • Du lernst den Unterschied zwischen lexikalischer und semantischer Suche kennen
  • Du siehst, wie beide Ansätze kombiniert werden, darunter Methoden wie Reciprocal Rank Fusion
  • Du bekommst konkrete Code-Beispiele für Chroma, Qdrant und LanceDB
  • Du kennst die typischen Stolpersteine und wie Du sie vermeidest

Einleitung: Hybrid Search verständlich erklärt

Bei Lokalem RAG geht es darum, aus eigenen Dokumenten die passenden Stellen zu finden und einem Sprachmodell als Kontext zur Verfügung zu stellen. Die Qualität der Antworten hängt maßgeblich davon ab, wie gut die Suche funktioniert. Hybrid Search kombiniert zwei Suchstrategien, die jeweils für sich Stärken und Schwächen haben: die lexikalische Suche und die semantische Suche. Zusammen liefern sie deutlich bessere Ergebnisse als jede Methode allein.

Wer sich tiefer in die Grundlagen einlesen möchte, findet mehr in RAG Grundlagen und im Überblicksartikel zu Was ist lokale KI?.

Stell Dir vor, Du durchsuchst eine technische Dokumentation nach dem Begriff “Error 404”. Eine reine Vektorsuche, also semantische Suche, versteht die Bedeutung Deiner Frage. Sie findet Abschnitte über “Seite nicht gefunden” oder “Page not found”, weil der Begriff semantisch verwandt ist. Aber sie verpasst möglicherweise den exakten Fehlercode 404, weil dieser als Zahl im Vektorraum wenig semantisches Gewicht hat.

Eine reine Keyword-Suche, also lexikalische Suche, findet jedes Dokument, das das Wort “404” enthält. Sie findet den Fehlercode zuverlässig. Aber sie verpasst alle Abschnitte, die das Problem beschreiben, ohne die Zahl zu nennen. Ein Abschnitt über “Seite nicht gefunden” taucht nicht auf, wenn er das Wort “404” nicht enthält.

Hybrid Search führt beide Suchen aus und kombiniert die Ergebnisse. So findest Du sowohl den exakten Fehlercode als auch die semantisch verwandten Erklärungen. Das ist besonders wertvoll bei technischen Dokumentationen, API-Referenzen und Handbüchern, in denen Codes, Namen und Fachbegriffe neben beschreibendem Text stehen.

Hybrid Search kurz erklärt

Hybrid Search ist wie ein Bibliothekar, der auf zwei Arten gleichzeitig sucht. Er fragt zum einen: “Welche Bücher behandeln das gleiche Thema wie Deine Frage?” Das ist die semantische Suche, sie achtet auf Bedeutung und Zusammenhang. Zum anderen fragt er: “Welche Bücher enthalten genau die Wörter, die Du genannt hast?” Das ist die lexikalische Suche, sie achtet auf exakte Treffer.

Beide Ergebnisse werden zusammengeführt und nach Relevanz sortiert. Ein Dokument, das in beiden Listen weit oben steht, landet auch im Gesamtergebnis weit oben. Ein Dokument, das nur in einer Liste gut abschneidet, wird abgewertet. So profitiert die Suche von beiden Stärken gleichzeitig.

Für wen ist Hybrid Search gedacht?

Hybrid Search richtet sich an alle, die RAG-Systeme bauen und die Suchqualität verbessern wollen. Das umfasst Entwicklerinnen und Entwickler, die interne Wissensdatenbanken aufbauen, Teams, die Dokumentationen durchsuchbar machen, und Anwender, die lokale KI-Lösungen für eigene Dokumente einrichten. Besonders profitieren Anwendungsfälle mit einer Mischung aus beschreibendem Text und strukturierten Informationen wie Codes, IDs, Namen oder Fachbegriffen.

Wenn Du gerade erst mit RAG beginnst, ist es sinnvoll, zuerst die RAG Grundlagen und Embedding-Modelle zu lesen, bevor Du Dich in Hybrid Search vertiefst.

BegriffBedeutung
Hybrid SearchKombination aus lexikalischer und semantischer Suche
Dense RetrievalSemantische Suche über dichte Vektoren, auch Embeddings genannt
Sparse RetrievalLexikalische Suche über sparse Vektoren, bei denen nur bestimmte Dimensionen belegt sind
BM25Verbesserter TF-IDF-Algorithmus für die Keyword-Suche
TF-IDFMaß für die Wichtigkeit eines Wortes in einem Dokument
EmbeddingZahlenvektor, der die Bedeutung eines Textes repräsentiert
KeywordSuchbegriff, der exakt im Text vorkommen muss
SemanticAuf Bedeutung bezogen, nicht auf exakte Wortübereinstimmung
FusionMethode, um mehrere Ergebnislisten zu einer zu kombinieren
RRFReciprocal Rank Fusion, eine verbreitete Fusion-Methode

Was ist lexikalische Suche?

Die lexikalische Suche ist die klassische Textsuche. Sie sucht nach exakten Wortübereinstimmungen zwischen Suchanfrage und Dokument. Die bekanntesten Algorithmen sind TF-IDF und BM25.

TF-IDF steht für Term Frequency, Inverse Document Frequency. Der Algorithmus bewertet, wie oft ein Wort in einem Dokument vorkommt, und gewichtet es höher, wenn es in wenigen Dokumenten auftaucht. Ein Wort, das überall vorkommt, ist weniger aussagekräftig.

BM25 baut auf TF-IDF auf und verbessert es. BM25 berücksichtigt die Dokumentlänge und dämpft die Wirkung sehr häufiger Wörter. Das führt zu relevanteren Treffern. BM25 ist bis heute der Standard für Keyword-Suche und wird in Suchmaschinen wie Elasticsearch und Lucene eingesetzt.

Die Stärken der lexikalischen Suche liegen bei exakten Treffern. Sie findet Namen, Fehlercodes, Versionsnummern, IDs und Fachbegriffe zuverlässig. Wenn ein Dokument das gesuchte Wort nicht enthält, erscheint es nicht in den Ergebnissen. Das ist bei vielen Suchanfragen genau das gewünschte Verhalten.

Was ist semantische Suche?

Die semantische Suche arbeitet mit Embeddings. Ein Embedding-Modell wandelt Text in einen Vektor um, der die Bedeutung des Textes repräsentiert. Bei einer Suchanfrage wird ebenfalls ein Vektor erzeugt, und die Vektordatenbank sucht die Vektoren, die am nächsten liegen. Mehr dazu in Embedding-Modelle.

Die Stärke der semantischen Suche liegt im Verständnis von Bedeutung. Sie erkennt Synonyme, Paraphrasen und thematische Verwandtschaft. Eine Suche nach “Wie beende ich den Server?” findet auch Abschnitte über “Server herunterfahren” oder “Prozess stoppen”, ohne dass die Wörter übereinstimmen müssen.

Die Schwäche der semantischen Suche zeigt sich bei spezifischen Begriffen. Ein Fehlercode wie “404” oder ein Produktname wie “Model-X100” hat wenig semantische Bedeutung. Der Vektor einer Zahl oder einer ID unterscheidet sich kaum von anderen Zahlen oder IDs. Die semantische Suche findet diese Begriffe schlecht oder gar nicht.

Schwächen beider Ansätze

Keine der beiden Methoden ist allein optimal. Jede hat blind spots, in denen sie versagt.

Die lexikalische Suche scheitert, wenn Suchanfrage und Dokument unterschiedliche Wörter für das gleiche Konzept verwenden. Wer nach “Auto” sucht, findet kein Dokument, das nur “Fahrzeug” enthält. Wer nach “Server stoppen” sucht, findet kein Dokument über “Prozess beenden”. Sie versteht keine Synonyme und keine Paraphrasen.

Die semantische Suche scheitert bei exakten Begriffen, die keine semantische Bedeutung tragen. Fehlercodes, Versionsnummern, IDs, Produktnamen und Abkürzungen sind im Vektorraum schwer zu unterscheiden. Die Suche nach “HTTP 500” findet möglicherweise alle Abschnitte über Serverfehler, aber nicht den einen, der genau diesen Code enthält.

Hybrid Search löst dieses Problem, indem sie beide Suchen ausführt und die Ergebnisse kombiniert. Die Stärken der einen Methode decken die Schwächen der anderen ab.

Hybrid Search läuft in drei Schritten ab:

  1. Lexikalische Suche: Die Suchanfrage wird mit BM25 oder einem ähnlichen Algorithmus gegen alle Dokumente gesucht. Das Ergebnis ist eine Rangliste nach Keyword-Relevanz.
  2. Semantische Suche: Die Suchanfrage wird in einen Vektor umgewandelt und gegen alle Embeddings in der Vektordatenbank gesucht. Das Ergebnis ist eine Rangliste nach Vektorähnlichkeit.
  3. Fusion: Beide Ranglisten werden zu einer gemeinsamen Liste zusammengeführt. Dokumente, die in beiden Listen gut abschneiden, landen weit oben.

Die Fusion ist der entscheidende Schritt. Es gibt verschiedene Methoden, um zwei Ranglisten zu kombinieren. Die zwei bekanntesten sind die gewichtete Summe und die Reciprocal Rank Fusion.

Bei der gewichteten Summe bekommt jede Liste einen Faktor. Zum Beispiel 0.7 für die semantische Suche und 0.3 für die lexikalische Suche. Die Scores werden addiert und ergeben den Gesamtscore. Das Problem: Die Scores beider Suchen liegen oft auf unterschiedlichen Skalen, was die Gewichtung schwierig macht.

Die Reciprocal Rank Fusion löst dieses Problem, indem sie nicht die Scores, sondern die Ränge kombiniert. Dadurch sind die Skalen irrelevant.

Reciprocal Rank Fusion (RRF)

RRF ist die am häufigsten verwendete Fusion-Methode für Hybrid Search. Sie kombiniert Ranglisten, ohne die konkreten Scores zu kennen. Das macht sie robust und einfach anzuwenden.

Die Formel lautet:

RRF(d) = summe ueber alle Ranglisten von: 1 / (k + rang(d))

Dabei ist d das Dokument, rang(d) ist die Position des Dokuments in der jeweiligen Rangliste, und k ist ein Konstante, typischerweise 60. Ein Dokument, das in beiden Listen auf Platz 1 steht, bekommt einen hohen RRF-Score. Ein Dokument, das nur in einer Liste weit oben steht, bekommt einen mittleren Score.

Der Parameter k steuert, wie stark obere Ränge gewichtet werden. Ein kleines k macht die oberen Plätze dominanter, ein großes k verteilt den Einfluss gleichmäßiger. Der Wert 60 hat sich in der Praxis bewährt und wird in vielen Systemen als Standard verwendet.

RRF ist beliebt, weil es keine Normalisierung der Scores erfordert. BM25-Scores und Kosinus-Ähnlichkeiten liegen auf völlig unterschiedlichen Skalen. RRF ignoriert die Scores und nutzt nur die Ränge. Das macht es robust gegenüber Skalierungsproblemen.

Implementierung mit lokalen Tools

Mehrere lokale Vektordatenbanken unterstützen Hybrid Search direkt. Im Folgenden siehst Du Beispiele für Chroma, Qdrant und LanceDB. Mehr zu diesen Datenbanken findest Du in Vektordatenbanken.

Chroma

Chroma bietet Hybrid Search über die Kombination von Embedding-Suche und einer eigenen BM25-Implementierung. Mehr Details dazu in Chroma.

import chromadb

client = chromadb.PersistentClient(path="./chroma_db")
collection = client.get_or_create_collection("dokumente")

# Dokumente hinzufuegen
collection.add(
    documents=["Error 404: Seite nicht gefunden", "Server stoppen und neu starten"],
    metadatas=[{"quelle": "docs"}, {"quelle": "docs"}],
    ids=["doc1", "doc2"]
)

# Semantische Suche
results_semantic = collection.query(
    query_texts=["Seite nicht gefunden"],
    n_results=5
)

# Lexikalische Suche ueber where-Filter oder externes BM25
# Chroma unterstuetzt Hybrid Search ueber Custom Embedding Functions
# oder externe BM25-Implementierungen wie rank_bm25
from rank_bm25 import BM25Okapi

docs = collection.get()["documents"]
tokenized = [doc.lower().split() for doc in docs]
bm25 = BM25Okapi(tokenized)
scores = bm25.get_scores("404 seite nicht gefunden".split())

In der Praxis kombinierst Du die Ergebnisse beider Suchen mit RRF. Chroma selbst bietet zunehmend native Hybrid-Search-Unterstützung, aber die manuelle Kombination mit rank_bm25 ist ein bewährter Weg.

Qdrant

Qdrant unterstützt Hybrid Search nativ über sparse und dense Vektoren. Mehr dazu in Qdrant.

from qdrant_client import QdrantClient
from qdrant_client.models import SparseVector, SearchRequest, FusionQuery

client = QdrantClient(path="./qdrant_db")

# Hybride Suche mit nativer Fusion
results = client.query_points(
    collection_name="dokumente",
    prefetch=[
        SearchRequest(
            using="dense",
            vector=[0.1, 0.2, 0.3],  # Embedding der Suchanfrage
            limit=20
        ),
        SearchRequest(
            using="sparse",
            vector=SparseVector(
                indices=[10, 25, 80],
                values=[0.8, 0.5, 0.3]
            ),
            limit=20
        )
    ],
    query=FusionQuery(fusion="rrf"),
    limit=10
)

Qdrant führt die Fusion direkt auf dem Server aus. Du musst RRF nicht selbst implementieren. Das ist besonders praktisch, wenn Du viele Dokumente hast und die Fusion effizient laufen soll.

LanceDB

LanceDB bietet ebenfalls Hybrid Search mit integrierter RRF-Unterstützung.

import lancedb

db = lancedb.connect("./lancedb_db")
table = db.open_table("dokumente")

# Hybride Suche mit FTS und Vektor-Suche
results = table.search(
    query="Error 404",
    query_type="hybrid"
).limit(10).to_list()

LanceDB kombiniert Full-Text Search und Vektorsuche in einem Aufruf. Die Fusion erfolgt automatisch über RRF.

Beispiel: Hybride Suche in einer Dokumentation

Stell Dir vor, Du hast eine Dokumentation mit folgenden Abschnitten:

  • Abschnitt A: “Error 404: Die angeforderte Seite wurde nicht gefunden.”
  • Abschnitt B: “Wenn eine Seite nicht existiert, gibt der Server einen Fehler zurück.”
  • Abschnitt C: “Error 500: Interner Serverfehler bei der Verarbeitung.”

Die Suchanfrage lautet: “Was bedeutet Error 404?”

Lexikalische Suche (BM25):

  1. Abschnitt A, enthält “Error” und “404” exakt
  2. Abschnitt C, enthält “Error”, aber nicht “404”
  3. Abschnitt B, enthält keines der Wörter

Semantische Suche (Vektorsuche):

  1. Abschnitt B, semantisch am nächsten, “Seite nicht existieren” passt zur Frage
  2. Abschnitt A, semantisch verwandt, enthält den Fehler
  3. Abschnitt C, semantisch verwandt, aber anderer Fehler

Hybrid Search (RRF):

  1. Abschnitt A, in beiden Listen gut platziert
  2. Abschnitt B, in der semantischen Liste auf Platz 1
  3. Abschnitt C, in beiden Listen mittelmäßig

Abschnitt A landet insgesamt oben, weil es sowohl den exakten Code als auch die semantische Bedeutung abdeckt. Genau das ist der Vorteil von Hybrid Search: Das beste Ergebnis aus beiden Welten steht am Ende ganz oben.

Hybrid Search ist mächtig, aber es gibt einige Fallstricke, auf die Du achten solltest.

  1. Falsche Gewichtung: Wenn Du gewichtete Summe statt RRF nutzt, können falsche Gewichte die Ergebnisse verzerren. Teste verschiedene Gewichtungen mit echten Suchanfragen.
  2. Tokenisierung bei BM25: Deutsche Komposita wie “Datenbankverbindung” werden von einfachen Tokenisierern nicht zerlegt. Ein Stemmer oder ein Tokenisierer für Deutsch verbessert die Keyword-Suche deutlich.
  3. Unterschiedliche Chunk-Größen: Wenn die lexikalische und die semantische Suche auf unterschiedlich großen Chunks arbeiten, sind die Ergebnisse schwer vergleichbar. Beide Suchen sollten die gleichen Chunks verwenden.
  4. Fehlende Indexierung: BM25 braucht einen invertierten Index. Wenn Du nur eine Vektordatenbank nutzt, musst Du den Index für die Keyword-Suche separat aufbauen.
  5. Sprachabhängigkeit: BM25 ist sprachabhängig. Ein englischer Tokenisierer funktioniert schlecht für deutsche Texte. Stelle sicher, dass die Tokenisierung zur Sprache Deiner Dokumente passt.
  6. Zu viele Ergebnisse: Wenn beide Suchen jeweils 100 Ergebnisse liefern, wird die Fusion langsam und unübersichtlich. Begrenze die Anzahl der Ergebnisse pro Suche auf 20 bis 50.
  7. Kein Reranking: Hybrid Search liefert gute Kandidaten, aber die Reihenfolge ist nicht perfekt. Ein nachgeschaltetes Reranking-Modell verbessert die Qualität weiter. Mehr dazu in Reranking.

Hybrid Search benötigt zwei Indizes: einen Vektorindex für die semantische Suche und einen invertierten Index für die lexikalische Suche. Beide zusammen brauchen mehr Speicher als ein einzelner Index, aber der Mehraufwand ist moderat. BM25-Indizes sind kompakt und schnell.

Rechenleistung: Die semantische Suche benötigt ein Embedding-Modell, das die Suchanfrage vektorisiert. Das ist auf der CPU ausreichend schnell. Die lexikalische Suche ist sehr schnell und benötigt kaum Rechenleistung. Die Fusion selbst ist trivial und kostet kaum Zeit.

Kosten: Alle benötigten Tools sind Open Source und kostenlos. Chroma, Qdrant und LanceDB stehen unter freien Lizenzen. BM25-Implementierungen wie rank_bm25 sind ebenfalls frei verfügbar.

Sicherheit: Wenn alle Komponenten lokal laufen, bleiben Deine Dokumente auf Deinem Rechner. Weder die Suchanfrage noch die Dokumente verlassen das System. Das ist ein zentraler Vorteil von lokaler KI, wie in Was ist lokale KI? beschrieben.

FAQ: Hybrid Search - Typische Fragen

Was ist Hybrid Search einfach erklärt?

Hybrid Search kombiniert die klassische Keyword-Suche mit der semantischen Vektorsuche. Beide Suchen werden ausgeführt und die Ergebnisse zusammengeführt. So profitiert die Suche von exakten Treffern und semantischem Verständnis gleichzeitig.

Brauche ich Hybrid Search für jedes RAG-System?

Nicht zwingend. Für reine Fließtexte ohne Codes oder Namen reicht oft die semantische Suche. Sobald Deine Dokumente aber Fehlercodes, IDs, Produktnamen oder andere exakte Begriffe enthalten, wird Hybrid Search empfohlen.

Was ist der Unterschied zwischen Dense und Sparse Retrieval?

Dense Retrieval nutzt dichte Vektoren, also Embeddings, bei denen alle Dimensionen belegt sind. Sparse Retrieval nutzt sparse Vektoren, bei denen nur wenige Dimensionen belegt sind, typischerweise für Keyword-Suche. Hybrid Search kombiniert beide.

Was ist RRF und warum wird es so oft verwendet?

RRF steht für Reciprocal Rank Fusion. Es kombiniert Ranglisten, ohne die konkreten Scores zu kennen. Das macht es robust gegenüber unterschiedlichen Score-Skalen. Es ist einfach zu implementieren und liefert in der Praxis gute Ergebnisse.

Muss ich BM25 selbst implementieren?

Nein. Es gibt fertige Bibliotheken wie rank_bm25 für Python. Qdrant und LanceDB bieten BM25 direkt in der Datenbank an. Chroma kann mit externen BM25-Bibliotheken kombiniert werden.

Wie wähle ich die Gewichtung zwischen Vektor- und Keyword-Suche?

Mit RRF brauchst Du keine Gewichtung einzustellen, die Methode kombiniert automatisch. Mit gewichteter Summe starte mit 0.5 für beide und teste mit echten Suchanfragen. Passe die Gewichtung an, bis die Ergebnisse Deinen Erwartungen entsprechen.

Funktioniert Hybrid Search mit deutschen Texten?

Ja, aber die Tokenisierung für BM25 muss auf Deutsch eingestellt sein. Ein deutscher Stemmer und eine Stopword-Liste verbessern die Keyword-Suche. Für die semantische Suche solltest Du ein mehrsprachiges Embedding-Modell verwenden.

Ist Hybrid Search langsamer als eine einzelne Suche?

Ja, es werden zwei Suchen ausgeführt. Der Geschwindigkeitsunterschied ist aber gering, weil beide Suchen parallel laufen können. Die Fusion selbst ist sehr schnell. In der Praxis ist der Unterschied kaum spürbar.

Sollte ich Reranking nach Hybrid Search verwenden?

Ja, das ist empfehlenswert. Hybrid Search liefert gute Kandidaten, aber die Reihenfolge kann durch ein Reranking-Modell weiter verbessert werden. Reranking bewertet die Top-Ergebnisse noch einmal mit einem stärkeren Modell.

Kann ich Hybrid Search ohne GPU nutzen?

Ja. Die lexikalische Suche benötigt keine GPU. Die semantische Suche braucht ein Embedding-Modell, das auf der CPU läuft. Für kleine bis mittlere Dokumentmengen ist die CPU ausreichend schnell.

Welche Vektordatenbanken unterstützen Hybrid Search nativ?

Qdrant und LanceDB unterstützen Hybrid Search mit integrierter RRF direkt. Chroma kann mit externen BM25-Bibliotheken erweitert werden. Weaviate und Milvus bieten ebenfalls native Hybrid-Search-Funktionen.

Quellen und weiterführende Literatur

  • Originalpapier zu Reciprocal Rank Fusion von Cormack et al.
  • Qdrant Dokumentation zu Hybrid Search
  • LanceDB Dokumentation zu Hybrid Search
  • Chroma Dokumentation
  • BM25 Originalveröffentlichung von Robertson und Zaragoza
  • Sentence Transformers Dokumentation
Zurück zum KI Blog
Share:

Ähnliche Beiträge