Hybridsuche in Azure Cosmos DB for NoSQL (Vorschau)
Azure Cosmos DB for NoSQL unterstützt jetzt eine leistungsstarke Hybridsuchfunktion, die mithilfe der Reciprocal Rank Fusion (RRF)-Funktion die Vektorsuche mit der Bewertung der Volltextsuche (BM25) kombiniert.
Hinweis
Die Volltext- und Hybridsuche befindet sich in der frühen Vorschau und ist derzeit möglicherweise nicht in allen Regionen verfügbar.
Was ist die Hybridsuche?
Die Hybridsuche nutzt die Stärken der vektorbasierten und der herkömmlichen schlüsselwortbasierten Suchmethoden, um relevantere und genauere Suchergebnisse zu liefern. Die Hybridsuche in Azure Cosmos DB for NoSQL ist einfach, da sowohl Metadaten als auch Vektoren im selben Dokument gespeichert werden können.
Die Hybridsuche in Azure Cosmos DB for NoSQL integriert zwei unterschiedliche Suchmethoden:
- Vektorsuche: Nutzt Machine Learning-Modelle, um die semantische Bedeutung von Abfragen und Dokumenten zu verstehen. Dies ermöglicht differenziertere und kontextbezogene Suchergebnisse, insbesondere für komplexe Abfragen, bei denen die herkömmliche Schlüsselwortsuche möglicherweise nicht ausreicht.
- Volltextsuche (BM25): Ein bewährter Algorithmus, der Dokumente basierend auf dem Vorhandensein und der Häufigkeit von Wörtern und Begriffen bewertet. BM25 ist besonders effektiv für einfache Schlüsselwortsuchen und bietet eine stabile Baseline für die Suchrelevanz.
Die Ergebnisse der Vektorsuche und der Volltextsuche werden dann mithilfe der Reciprocal Rank Fusion (RRF)-Funktion kombiniert. RRF ist eine Methode zum Aggregieren von Bewertungen, die die Bewertungen aus mehreren Suchalgorithmen zusammenführt, um eine einzelne, einheitliche Bewertung zu erzeugen. Diese Methode stellt sicher, dass die endgültigen Suchergebnisse von den Stärken beider Suchansätze profitieren, und bietet mehrere Vorteile.
- Verbesserte Relevanz: Indem sie das semantische Verständnis mit dem Schlüsselwortabgleich kombiniert, liefert die Hybridsuche relevantere Ergebnisse für eine Vielzahl von Abfragen.
- Verbesserte Genauigkeit: Die RRF-Funktion stellt sicher, dass die relevantesten Ergebnisse beider Suchmethoden priorisiert werden.
- Vielseitigkeit: Die Hybridsuche eignet sich für verschiedene Anwendungsfälle, einschließlich Retrieval Augmented Generation (RAG), und kann die Antworten verbessern, die ein Large Language Model (LLM) auf der Grundlage Ihrer eigenen Daten generiert.
Verwenden der Hybridsuche
- Aktivieren Sie das Feature „Vektorsuche in Azure Cosmos DB for NoSQL“.
- Aktivieren Sie die Previewfunktion „Volltext- und Hybridsuche für NoSQL“.
- Erstellen Sie einen Container mit einer Vektorrichtlinie, einer Volltextrichtlinie, einem Vektorindex und einem Volltextindex.
- Fügen Sie Ihre Daten mit Text- und Vektoreigenschaften ein.
- Führen Sie Hybridabfragen für die Daten aus.
Konfigurieren von Richtlinien und Indizes für die Hybridsuche
Wichtig
Derzeit sind Vektorrichtlinien und Vektorindizes nach der Erstellung unveränderlich. Um Änderungen vorzunehmen, erstellen Sie eine neue Sammlung.
Beispiel für eine Vektorrichtlinie
{
"vectorEmbeddings": [
{
"path":"/vector",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":3
},
}
Beispiel für eine Volltextrichtlinie
{
"defaultLanguage": "en-US",
"fullTextPaths": [
{
"path": "/text",
"language": "en-US"
}
]
}
Beispiel für eine Indizierungsrichtlinie mit Volltext- und Vektorindizes
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
},
{
"path": "/vector/*"
}
],
"fullTextIndexes": [
{
"path": "/text"
}
],
"vectorIndexes": [
{
"path": "/vector",
"type": "DiskANN"
}
]
}
Hybridsuchabfragen
Hybridsuchabfragen können mithilfe der Systemfunktion RRF
in einer ORDER BY RANK
-Klausel ausgeführt werden, die sowohl eine VectorDistance
-Funktion als auch FullTextScore
enthält. Eine parametrisierte Abfrage zum Ermitteln der 1.000 relevantesten Ergebnisse (Top-k) würde z. B. wie folgt aussehen:
SELECT TOP @k *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, @queryVector), FullTextScore(c.content, [@searchTerm1, @searchTerm2, ...]))
Angenommen, Sie haben ein Dokument mit Vektoreinbettungen, die in jedem Dokument in der c.vector
-Eigenschaft gespeichert sind, und Textdaten in der Eigenschaft „c.text“. Um die zehn relevantesten Dokumente mithilfe der Hybridsuche abzurufen, kann die Abfrage wie folgt geschrieben werden:
SELECT TOP 10 *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, [1,2,3]), FullTextScore(c.text, ["text", "to", "search", "goes" ,"here])