JSON-Suchindexe

Der Suchindex von Spanner bietet nicht nur die Möglichkeit, Text zu indexieren, sondern auch JSON- und JSONB-Dokumente effizient zu indexieren und abzufragen. Verwenden Sie Suchindexe für eigenständige JSON- und JSONB-Abfragen oder um andere Suchanfragen mit Volltextsuche zu ergänzen.

Weitere Informationen finden Sie unter JSON-Daten indexieren und JSONB-Daten indexieren.

JSON und JSONB tokenisieren

Mit der Funktion TOKENIZE_JSON können Sie einen JSON-Index in GoogleSQL und mit der Funktion TOKENIZE_JSONB einen JSONB-Index in PostgreSQL erstellen. Weitere Informationen finden Sie unter TOKENIZE_JSON und TOKENIZE_JSONB.

JSON- und JSONB-Abfragen

Mit einem Suchindex können Sie Abfragen beschleunigen, die Bedingungen für die JSON-Einschränkungen und die Schlüsselexistenz enthalten. Mit der JSON-Begrenzung wird festgelegt, ob ein JSON-Dokument in einem anderen enthalten ist. Mit „Key existence“ wird ermittelt, ob ein Schlüssel im Datenbankschema vorhanden ist.

  • In GoogleSQL:

    • Mit der Funktion JSON_CONTAINS können Sie die JSON-Einschränkungen in Ihrem Schema ausdrücken.
    • Bedingungen für die Existenz von Schlüsseln mithilfe des Feldzugriffs, der Array-Indexoperatoren und IS NOT NULL erstellen Die Operatoren für den Feldzugriff und den Array-Index beschreiben einen JSON-Dokumentpfad. IS NOT NULL prüft, ob dieser Pfad vorhanden ist (z. B. doc.sub.path[@index].key IS NOT NULL).
  • In PostgreSQL:

    • Verwenden Sie die Operatoren @> und <@, um JSONB-Begrenzungen auszudrücken. Weitere Informationen finden Sie unter JSONB-Operatoren.
    • Mit den Operatoren ?, ?| und ?& können Sie Bedingungen für die Existenz von Schlüsseln erstellen. Weitere Informationen finden Sie unter JSONB-Operatoren.

Sie können in Ihren Abfragen mehrere JSON-Bedingungen beliebigen Typs in den Suchindex aufnehmen. Sie können die JSON-Bedingungen auch mit AND, OR und NOT in einer logischen Kombination einschließen.

Nutzung des Suchindex prüfen

Ob für Ihre Abfrage ein Suchindex verwendet wird, sehen Sie im Abfrage-Ausführungsplan am Knoten Suchindex-Scan.

Beschränkungen

  • Suchindexe, einschließlich JSON- und JSONB-Suchindexe, werden nur in schreibgeschützten Transaktionen verwendet. Spanner verwendet möglicherweise relevante sekundäre Indexe in einer Lese-Schreib-Transaktion. Wenn Sie versuchen, die Verwendung eines Suchindexes in einer Lese-Schreib-Transaktion zu erzwingen, tritt der folgende Fehler auf: ERROR: spanner: code = "InvalidArgument", desc = "The search index AlbumsIndex cannot be used in transactional queries by default."
  • Wenn Sie versuchen, bestimmte große oder sehr komplexe JSON-Dokumente in einem Suchindex zu speichern, wird möglicherweise der Fehler too many search token bytes zurückgegeben. Die Größe des Ausgabetokens aus diesem JSON-Dokument darf 10 MB nicht überschreiten. Wenn nicht das gesamte Dokument durchsuchbar sein soll, können Sie einen kleineren Teil des Dokuments extrahieren (z. B. mithilfe einer generierten Spalte) und stattdessen in der Spalte suchen.

Nächste Schritte