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
).
- Mit der Funktion
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.
- Verwenden Sie die 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
- Weitere Informationen zur Tokenisierung und zu Tokenizern
- Weitere Informationen zu Suchindexen
- Weitere Informationen zum Indexieren von JSON-Daten
- Weitere Informationen zum Indexieren von JSONB-Daten