Freigeben über


Suchen und Abfragen mit Textindizes in Azure DocumentDB

Eines der wichtigsten Features von Azure DocumentDB 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 Groß-/Kleinschreibung, aber nicht die Berücksichtigung von diakritischen Zeichen.

Textindizes in Azure DocumentDB sind spezielle Datenstrukturen, die textbasierte Abfragen optimieren, wodurch sie schneller und effizienter werden. Sie sind für die Verarbeitung von Textinhalten wie Dokumenten, Artikeln, Kommentaren oder anderen textintensiven Daten konzipiert. Textindizes verwenden Techniken wie Tokenisierung, Wortstammerkennung und Beenden von Wörtern, um einen Index zu erstellen, der die Leistung von textbasierten Suchvorgängen verbessert.

Voraussetzungen

  • Ein Azure-Abonnement

    • Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto
  • Ein vorhandener Azure DocumentDB-Cluster

    • Wenn Sie keinen Cluster haben, erstellen Sie einen neuen Cluster.

Definieren eines Textindexes

Lassen Sie uns aus Gründen der Einfachheit ein Beispiel für eine Bloganwendung mit der folgenden Einrichtung betrachten:

  • Datenbankname: cosmicworks
  • Sammlungsname: products

In dieser Beispielanwendung werden Artikel als Dokumente mit der folgenden Struktur gespeichert:

{
  "_id": ObjectId("617a34e7a867530bff1b2346"),
  "title": "Azure DocumentDB - A Game Changer",
  "content": "Azure DocumentDB is a globally distributed, multi-model database service.",
  "author": "John Doe",
  "category": "Technology",
  "published": true
}
  1. Verwenden Sie die Methode mit der createIndextext 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 Sammlung definieren können, können Sie in Azure DocumentDB Textindizes für mehrere Felder erstellen, damit Sie Textsuchen in verschiedenen Feldern in Ihren Dokumenten ausführen können.

  2. Optional können Sie einen Index erstellen, um die Suche sowohl im title- als auch im content-Feld zu unterstützen.

    db.products.createIndex({ title: "text", content: "text" })
    

Konfigurieren von Textindexoptionen

Textindizes in Azure DocumentDB verfügen über mehrere Optionen zum Anpassen ihres Verhaltens. Sie können z. B. die Sprache für die Textanalyse angeben, Gewichtungen festlegen, um bestimmte Felder zu priorisieren, und Groß-/Kleinschreibung ignorierende Suchvorgänge konfigurieren. Hier ist ein Beispiel für das Erstellen eines Textindexes mit Optionen:

  1. Erstellen Sie einen Index, um die Suche in den title Feldern und content Feldern mit Unterstützung für englischen Sprachen zu unterstützen. Weisen Sie dem title Feld außerdem höhere Gewichtungen zu, um es in 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 Textindex können Sie einzelnen Feldern im Index unterschiedliche Gewichtungen zuweisen. Diese Gewichtungen stellen die Wichtigkeit oder Relevanz jedes Felds in der Suche dar. Azure DocumentDB berechnet eine Bewertung und zugewiesene Gewichtungen für jedes Dokument basierend auf den Suchbegriffen beim Ausführen einer Textsuchabfrage. Die Bewertung stellt die Relevanz des Dokuments für die Suchabfrage dar.

  1. Erstellen Sie einen Index, um die Suche sowohl für die Felder title als auch für die content Felder zu unterstützen. Weisen Sie dem Feld "title" eine Gewichtung von 2 und eine Gewichtung von 1 dem Feld "content" zu.

    db.products.createIndex(
    { title: "text", content: "text" },
    { weights: { title: 2, content: 1 } }
    )
    

    Hinweis

    Wenn ein Client eine Textsuchabfrage mit dem Begriff "DocumentDB" ausführt, wird die Bewertung für jedes Dokument in der Auflistung basierend auf dem Vorhandensein und der Häufigkeit des Ausdrucks sowohl in den Feldern "title" als auch "content" berechnet, wobei aufgrund der höheren Gewichtung eine höhere Bedeutung für das Feld "titel" angegeben wird.

Ausführen einer Textsuche mithilfe eines Textindexes

Nachdem der Textindex erstellt wurde, können Sie Textsuchen mit dem Operator "text" in Ihren Abfragen ausführen. Der Textoperator vergleicht eine Suchzeichenfolge mit dem Textindex, um relevante Dokumente zu finden.

  1. Führen Sie eine Textsuche für den Ausdruck DocumentDBaus.

    db.products.find(
        { $text: { $search: "DocumentDB" } }
    )
    
  2. Optional können Sie den $meta Projektionsoperator zusammen mit dem textScore Feld in einer Abfrage verwenden, um die Gewichtung anzuzeigen.

    db.products.find(
        { $text: { $search: "DocumentDB" } },
        { score: { $meta: "textScore" } }
    )
    

Löschen eines Textindexes

Um einen Textindex in MongoDB abzulegen, können Sie die dropIndex() Methode für die Auflistung verwenden und den Indexschlüssel oder Namen für den Textindex angeben, den Sie entfernen möchten.

  1. Entfernen Sie einen Textindex, indem Sie den Schlüssel explizit angeben.

    db.products.dropIndex({ title: "text" })
    
  2. Legen Sie optional einen Textindex ab, indem Sie den automatisch generierten eindeutigen Namen angeben.

    db.products.dropIndex("title_text")
    

Textindexbeschränkungen

  • Für eine Auflistung kann nur ein Textindex definiert werden.
  • Hinweis() wird nicht in Kombination mit einer Abfrage mit dem Ausdruck $text unterstützt.
  • Sortiervorgänge können die Reihenfolge des Textindexes in MongoDB nicht verwenden.
  • Textindizes können relativ groß sein, was im Vergleich zu anderen Indextypen erheblichen Speicherplatz verbraucht.

Nächster Schritt