Volltextindizierung und Suche in Cosmos DB (in Azure und Fabric)

Die Volltextindizierung und Suche in Cosmos DB (in Azure und Fabric) verbessert die nativen Suchfunktionen Ihrer App, ohne dass ein externer Suchdienst erforderlich ist. Dieses Feature verwendet fortschrittliche Textverarbeitungstechniken wie Stammformreduzierung, Stopwortentfernung und Tokenisierung, um effiziente Textsuchen über einen spezialisierten Index zu ermöglichen.

Cosmos DB bietet Volltextindizierung und Suche, die entwickelt wurde, um Ihre Such- und Abrufworkloads zu verbessern. Dieses Feature umfasst erweiterte Textverarbeitungstechniken wie Stemming, Entfernung von Stoppwörtern und Tokenisierung, die effiziente und effektive Textsuchen über einen spezialisierten Textindex ermöglichen. Die Volltextsuche enthält auch die Volltextbewertung mit einer Funktion, die die Relevanz von Dokumenten für eine bestimmte Suchabfrage auswertet. BM25, oder Best Matching 25, berücksichtigt Faktoren wie Begriffshäufigkeit, umgekehrte Dokumenthäufigkeit und Dokumentlänge, um Dokumente zu bewerten und einzustufen. Dadurch wird sichergestellt, dass die relevantesten Dokumente oben in den Suchergebnissen angezeigt werden, um die Genauigkeit und Nützlichkeit von Textsuchen zu verbessern.

Die Volltextsuche eignet sich ideal für verschiedene Szenarien, darunter:

  • E-Commerce: Schnelle Suche nach Produkten basierend auf Beschreibungen, Bewertungen und anderen Textattributen.

  • Content Management: Effizientes Durchsuchen von Artikeln, Blogs und Dokumenten.

  • Kundendienst: Abrufen relevanter Supporttickets, FAQs und Knowledge Base-Artikel.

  • Benutzerinhalte: Analysieren und Durchsuchen von benutzergenerierten Inhalten wie Beiträgen und Kommentaren.

  • RAG für Chatbots: Verbessern der Chatbot-Antworten durch Abrufen relevanter Informationen aus großen Textkorpora, wodurch die Genauigkeit und Relevanz von Antworten verbessert wird.

  • Multi-Agent AI-Apps: Ermöglichen Sie mehreren KI-Agents, umfangreiche Textdatenmengen gemeinsam zu durchsuchen und zu analysieren und umfassende und differenzierte Einblicke zu bieten.

  1. Konfigurieren Sie einen Container mit einer Volltextrichtlinie und einem Volltextindex.

  2. Fügen Sie Ihre Daten mit Texteigenschaften ein.

  3. Führen Sie Abfragen für die Daten mithilfe von Volltext-Suchsystemfunktionen aus.

Um Die Funktionen für die Volltextsuche zu verwenden, sollten Sie zuerst zwei Richtlinien definieren:

  • Eine Volltextrichtlinie auf Containerebene, die definiert, welche Pfade Text für die neuen Funktionen des Volltextabfragesystems enthalten.

  • Ein Volltextindex, der der Indizierungsrichtlinie hinzugefügt wird, die eine effiziente Suche ermöglicht.

Sie können Volltextsuchabfragen ohne diese Richtlinien ausführen, aber sie verwenden nicht den Volltextindex und können weitere Anforderungseinheiten (RUs) verwenden. Ohne diese Richtlinie kann die Ausführung von Volltextsuchen auch länger dauern. Das Definieren von Volltextcontainer- und Indexrichtlinien wird empfohlen.

Volltextrichtlinie

Für jede Texteigenschaft, die Sie für die Volltextsuche konfigurieren möchten, müssen Sie sowohl die path Eigenschaft mit Text als auch den language Text deklarieren. Eine einfache Volltextrichtlinie kann folgendes sein:

{
  "defaultLanguage": "en-US",
  "fullTextPaths": [
    {
      "path": "/text",
      "language": "en-US"
    }
  ]
}

Das Definieren mehrerer Textpfade erfolgt ganz einfach durch Hinzufügen eines weiteren Elements zum fullTextPolicy-Array:

{
  "defaultLanguage": "en-US",
  "fullTextPaths": [
    {
      "path": "/text1",
      "language": "en-US"
    },
    {
      "path": "/text2",
      "language": "en-US"
    }
  ]
}

Von Bedeutung

Wildcardzeichen (*, []) werden derzeit nicht in der Volltextrichtlinie oder im Volltextindex unterstützt.

Weitere Informationen und Beispiele für Einstellungen einer Volltextrichtlinie finden Sie unter Volltextindizierungsrichtlinienbeispiele.

Unterstützung für mehrere Sprachen

Unterstützung für mehrere Sprachen ermöglicht es Ihnen, Text in Sprachen über Englisch hinaus indizieren und zu durchsuchen. Sie wendet sprachspezifische Tokenisierung, Wortstammerkennung und Stoppwortentfernung an, um genauere Suchergebnisse zu erhalten.

Hinweis

Die Unterstützung für mehrere Sprachen befindet sich in der frühen Vorschau. Die Leistung und Qualität der Suche unterscheiden sich möglicherweise von der Volltextsuche in Englisch. Das Entfernen von Stoppworten ist z. B. zurzeit nur für Englisch (en-us) verfügbar. Die Funktionalität kann durch die Weiterentwicklung der Vorschau geändert werden.

Die folgenden Sprachen werden unterstützt:

Sprache Code Stopword-Entfernung
English en-US Ja
Deutsch (Vorschau) de-DE No
Französisch (Vorschau) fr-FR No
Italienisch (Vorschau) it-IT No
Portugiesisch - Brasilien (Vorschau) pt-BR No
Portugiesisch - Portugal (Vorschau) pt-PT No
Spanisch (Vorschau) es-ES No

Bei Sprachcodes wird die Groß-/Kleinschreibung beachtet (z. en-US B. nicht en-us).

Volltextindex

Alle Volltextsuchvorgänge sollten einen Volltextindex verwenden. Ein Volltextindex kann in jeder Cosmos DB-Indexrichtlinie ganz einfach im folgenden Beispiel definiert werden:

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/\"_etag\"/?"
    },
  ],
  "fullTextIndexes": [
    {
      "path": "/text"
    }
  ]
}

Wie bei den Volltextrichtlinien können Volltextindizes auf mehreren Pfaden definiert werden:

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/\"_etag\"/?"
    },
  ],
  "fullTextIndexes": [
    {
      "path": "/text"
    },
    {
      "path": "/text2"
    }
  ]
}

Volltextsuchabfragen

Volltextsuche und Bewertungsvorgänge werden mithilfe der folgenden Systemfunktionen in der Abfragesprache ausgeführt:

  • FULLTEXTCONTAINS: Gibt true zurück, wenn eine angegebene Zeichenfolge in der angegebenen Eigenschaft eines Dokuments enthalten ist. Diese Funktion ist in einer WHERE Klausel hilfreich, wenn Sie sicherstellen möchten, dass bestimmte Schlüsselwörter in den von Ihrer Abfrage zurückgegebenen Dokumenten enthalten sind.

  • FULLTEXTCONTAINSALL: Gibt true zurück, wenn alle der angegebenen Zeichenfolgen in der angegebenen Eigenschaft eines Dokuments enthalten sind. Diese Funktion ist in einer WHERE Klausel hilfreich, wenn Sie sicherstellen möchten, dass mehrere Schlüsselwörter in den von Ihrer Abfrage zurückgegebenen Dokumenten enthalten sind.

  • FULLTEXTCONTAINSANY: Gibt true zurück, wenn eine der angegebenen Zeichenfolgen in der angegebenen Eigenschaft eines Dokuments enthalten ist. Diese Funktion ist in einer WHERE Klausel hilfreich, wenn Sie sicherstellen möchten, dass mindestens eines der Schlüsselwörter in den von Ihrer Abfrage zurückgegebenen Dokumenten enthalten ist.

  • FULLTEXTSCORE: Verwenden Sie diese Funktion in einer ORDER BY RANK Klausel, um Dokumente zurückzugeben, die nach ihrer Volltextbewertung sortiert sind, die relevantesten Dokumente (höchste Bewertung) oben und die am wenigsten relevanten (niedrigsten Bewertungen) unten.

Im Folgenden finden Sie einige Beispiele für die einzelnen Funktionen.

FULLTEXTCONTAINS

In diesem Beispiel möchten wir die ersten 10 Ergebnisse abrufen, in denen der Ausdruck "rotes Fahrrad" in der Eigenschaft c.textenthalten ist.

SELECT TOP 10
  *
FROM
  container c
WHERE
  FULLTEXTCONTAINS(c.text, "red bicycle")

FULLTEXTCONTAINSALL

In diesem Beispiel möchten wir erste 10 Ergebnisse erhalten, bei denen die Schlüsselwörter "rot" und "fahrrad" in der Eigenschaft c.textenthalten sind, aber nicht unbedingt zusammen.

SELECT TOP 10 *
FROM c
WHERE FULLTEXTCONTAINSALL(c.text, "red", "bicycle")

FULLTEXTCONTAINSANY

In diesem Beispiel möchten wir die ersten 10 Ergebnisse erhalten, bei denen die Schlüsselwörter "rot" und entweder "Fahrrad" oder "Skate" in der Eigenschaft c.textenthalten sind.

SELECT TOP 10
  *
FROM
  container c
WHERE
  FULLTEXTCONTAINS(c.text, "red") AND 
  FULLTEXTCONTAINSANY(c.text, "bicycle", "skateboard")

FULLTEXTSCORE

In diesem Beispiel möchten wir die ersten 10 Ergebnisse abrufen, in denen "Berg" und "Fahrrad" enthalten sind, und sortiert nach Relevanzreihenfolge. Das heißt, Dokumente, in denen diese Begriffe häufiger vorkommen, sollten weiter oben in der Liste angezeigt werden.

SELECT TOP 10
  *
FROM
  container c
ORDER BY RANK
  FULLTEXTSCORE(c.text, "bicycle", "mountain")

Von Bedeutung

FULLTEXTSCORE kann nur in der ORDER BY RANK Klausel verwendet und nicht in der SELECT Anweisung oder in einer WHERE Klausel projiziert werden.

Die Fuzzysuche kann die Toleranz gegenüber Tippfehlern und Textvariationen verbessern. Sie können einen zulässigen "Abstand" (Anzahl der Bearbeitungen) zwischen dem Suchbegriff und Dokumenttext angeben, sodass nahe Übereinstimmungen als Treffer angesehen werden können. Der maximale Abstand, der angegeben werden kann, ist 2 (zwei Bearbeitungen).

Hinweis

Die Fuzzysuche befindet sich in der frühen Vorschau. Leistung, Qualität und Funktionalität können sich durch die Weiterentwicklung der Vorschau ändern.

SELECT TOP 10
  *
FROM
  container c
WHERE
  FULLTEXTCONTAINS(c.text, {"term": "red", "distance":1}, {"term": "bicycle", "distance":2})