Suchen und Abfragen mit Textindizes in Azure Cosmos DB for MongoDB vCore
GILT FÜR: MongoDB-vCore
Eines der wichtigsten Features, das Azure Cosmos DB for MongoDB-vCore bietet, ist die Textindizierung, die eine effiziente Suche und Abfrage von textbasierten Daten ermöglicht. Der Dienst implementiert Textindizes der Version 2. Version 2 unterstützt die Berücksichtigung der Groß-/Kleinschreibung, aber nicht die Berücksichtigung diakritischer Zeichen.
Textindizes in Azure Cosmos DB for MongoDB sind spezielle Datenstrukturen, die textbasierte Abfragen optimieren und so schneller und effizienter machen. Sie sind für die Verarbeitung von Textinhalten wie Dokumenten, Artikeln, Kommentaren oder anderen textlastigen Daten konzipiert. Textindizes nutzen Techniken wie Tokenisierung, Wortstammerkennung und Stoppwörter zum Erstellen eines Indexes, der die Leistung von textbasierten Suchvorgängen verbessert.
Voraussetzungen
- Ein vorhandener Azure Cosmos DB for MongoDB-vCore-Cluster.
- Falls Sie nicht über ein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen.
- Wenn Sie über ein Azure-Abonnement verfügen, erstellen Sie einen neuen Azure Cosmos DB for MongoDB vCore Cluster.
Definieren eines Textindexes
Betrachten wir der Einfachheit halber ein Beispiel für eine Bloganwendung mit der folgenden Einrichtung:
- Datenbankname:
cosmicworks
- Auflistungsname:
products
In dieser Beispielanwendung werden Artikel als Dokumente mit der folgenden Struktur gespeichert:
{
"_id": ObjectId("617a34e7a867530bff1b2346"),
"title": "Azure Cosmos DB - A Game Changer",
"content": "Azure Cosmos DB is a globally distributed, multi-model database service.",
"author": "John Doe",
"category": "Technology",
"published": true
}
Verwenden Sie die
createIndex
-Methode mit dertext
-Option, um einen Textindex für dastitle
-Feld zu erstellen.use cosmicworks; db.products.createIndex({ title: "text" })
Hinweis
Obwohl Sie nur einen Textindex pro Auflistung definieren können, ermöglicht Ihnen Azure Cosmos DB for MongoDB vCore das Erstellen von Textindizes für mehrere Felder, damit Sie Textsuchen in verschiedenen Feldern in Ihren Dokumenten durchführen können.
Erstellen Sie optional einen Index, um die Suche nach den Feldern
title
undcontent
zu unterstützen.db.products.createIndex({ title: "text", content: "text" })
Konfigurieren von Textindexoptionen
Bei Textindizes in Azure Cosmos DB for MongoDB gibt es mehrere Optionen zum Anpassen von deren Verhalten. Beispielsweise können Sie die Sprache für die Textanalyse angeben, Gewichtungen festlegen, um bestimmte Felder zu priorisieren, und Suchvorgänge ohne Beachtung der Groß-/Kleinschreibung konfigurieren. Hier ist ein Beispiel für das Erstellen eines Textindexes mit Optionen:
Erstellen Sie einen Index, um die Suche nach den Feldern
title
undcontent
mit Unterstützung für die englische Sprache zu unterstützen. Weisen Sie außerdem dem Feldtitle
höhere Gewichtungen zu, um es in den Suchergebnissen zu priorisieren.db.products.createIndex( { title: "text", content: "text" }, { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false } )
Gewichtungen in Textindizes
Beim Erstellen eines Textindexes können Sie einzelnen Feldern im Index unterschiedliche Gewichtungen zuweisen. Diese Gewichtungen stellen die Wichtigkeit oder Relevanz jedes Felds in der Suche dar. Azure Cosmos DB for MongoDB vCore berechnet beim Ausführen einer Textsuchabfrage für jedes Dokument eine Bewertung und zugewiesene Gewichtungen basierend auf den Suchbegriffen. Die Bewertung stellt die Relevanz des Dokuments für die Suchabfrage dar.
Erstellen Sie einen Index, um die Suche nach den Feldern
title
undcontent
zu unterstützen. Weisen Sie dem Feld „title“ eine Gewichtung von 2 und dem Feld „content“ eine Gewichtung von 1 zu.db.products.createIndex( { title: "text", content: "text" }, { weights: { title: 2, content: 1 } } )
Hinweis
Wenn ein Client eine Textsuchabfrage mit dem Begriff „Cosmos DB“ ausführt, wird die Bewertung für jedes Dokument in der Auflistung basierend auf dem Vorhandensein und der Häufigkeit des Begriffs in den Feldern „title“ und „content“ berechnet, wobei dem Feld „title“ aufgrund seiner höheren Gewichtung eine höhere Bedeutung beigemessen wird.
Ausführen einer Textsuche mithilfe eines Textindexes
Sobald der Textindex erstellt wurde, können Sie Textsuchen mithilfe des Operators „text“ in Ihren Abfragen durchführen. Der Textoperator verwendet eine Suchzeichenfolge und gleicht sie mit dem Textindex ab, um relevante Dokumente zu finden.
Führen Sie eine Textsuche nach dem Ausdruck
Cosmos DB
aus.db.products.find( { $text: { $search: "Cosmos DB" } } )
Verwenden Sie in einer Abfrage optional den
$meta
-Projektionsoperator zusammen mit demtextScore
-Feld, um die Gewichtung anzuzeigen.db.products.find( { $text: { $search: "Cosmos DB" } }, { score: { $meta: "textScore" } } )
Löschen eines Textindexes
Zum Löschen eines Textindexes in MongoDB können Sie die dropIndex()
-Methode für die Auflistung verwenden und den Indexschlüssel oder den Namen für den Textindex angeben, den Sie entfernen möchten.
Löschen Sie einen Textindex, indem Sie explizit den Schlüssel angeben.
db.products.dropIndex({ title: "text" })
Optional können Sie einen Textindex löschen, indem Sie den automatisch generierten eindeutigen Namen angeben.
db.products.dropIndex("title_text")
Einschränkungen für Textindizes
- Für eine Auflistung kann nur ein Textindex definiert werden.
- Textindizes unterstützen einfache Textsuchen und bieten keine erweiterten Suchfunktionen wie z. B. RegEx-Suchen.
- „Hint()“ wird in Kombination mit einer Abfrage über den Ausdruck „$text“ nicht unterstützt.
- Sortiervorgänge können nicht die Sortierung des Textindexes in MongoDB nutzen.
- Textindizes können relativ groß sein und im Vergleich zu anderen Indextypen viel Speicherplatz belegen.