Freigeben über


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

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
}
  1. Verwenden Sie die createIndex-Methode mit der text-Option, um einen Textindex für das title-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.

  2. Erstellen Sie optional einen Index, um die Suche nach den Feldern title und content 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:

  1. Erstellen Sie einen Index, um die Suche nach den Feldern title und content mit Unterstützung für die englische Sprache zu unterstützen. Weisen Sie außerdem dem Feld title 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.

  1. Erstellen Sie einen Index, um die Suche nach den Feldern title und content 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.

  1. Führen Sie eine Textsuche nach dem Ausdruck Cosmos DB aus.

    db.products.find(
        { $text: { $search: "Cosmos DB" } }
    )
    
  2. Verwenden Sie in einer Abfrage optional den $meta-Projektionsoperator zusammen mit dem textScore-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.

  1. Löschen Sie einen Textindex, indem Sie explizit den Schlüssel angeben.

    db.products.dropIndex({ title: "text" })
    
  2. 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.

Nächster Schritt