Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
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.
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.
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Schwer verständlich","hardToUnderstand","thumb-down"],["Informationen oder Beispielcode falsch","incorrectInformationOrSampleCode","thumb-down"],["Benötigte Informationen/Beispiele nicht gefunden","missingTheInformationSamplesINeed","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-08-17 (UTC)."],[],[],null,["# JSON search indexes\n\n| **Note:** This feature is available with the Spanner Enterprise edition and Enterprise Plus edition. For more information, see the [Spanner editions overview](/spanner/docs/editions-overview).\n\n\u003cbr /\u003e\n\nIn addition to indexing text, the Spanner [search index](/spanner/docs/full-text-search/search-indexes)\nprovides an efficient way to index and query JSON and JSONB documents. Use\nsearch indexes for standalone JSON and JSONB queries, or to augment other\n[full-text search](/spanner/docs/full-text-search) queries.\n\nFor more information, see [Index JSON data](/spanner/docs/working-with-json#index) and\n[Index JSONB data](/spanner/docs/working-with-jsonb#index).\n\nTokenize JSON and JSONB\n-----------------------\n\nYou can use the `TOKENIZE_JSON` function to create a JSON index in\nGoogleSQL, or the `TOKENIZE_JSONB` function to create a JSONB index in\nPostgreSQL. For details, see [`TOKENIZE_JSON`](/spanner/docs/reference/standard-sql/search_functions#tokenize_json)\nand [`TOKENIZE_JSONB`](/spanner/docs/reference/postgresql/functions-and-operators#indexing).\n\nJSON and JSONB queries\n----------------------\n\nYou can use a search index to accelerate queries that include\n*JSON containment* and *key existence* conditions. JSON containment determines\nif one JSON document is contained within another. Key existence determines if a\nkey exists in the database schema.\n\n- In GoogleSQL:\n\n - Express JSON containment in your schema by using the [`JSON_CONTAINS`](/spanner/docs/reference/standard-sql/json_functions#json_contains) function.\n - Construct key existence conditions using the field access, array subscript operators, and `IS NOT NULL`. The field access and array subscript operators describe a JSON document path. `IS NOT NULL` checks for the existence of this path (for example, `doc.sub.path[@index].key IS NOT NULL`).\n- In PostgreSQL:\n\n - Express JSONB containment using the `@\u003e` and `\u003c@` operators. For more information, see [JSONB operators](/spanner/docs/reference/postgresql/functions-and-operators#jsonb_operators).\n - Construct key existence conditions using the `?`, `?|`, and `?&` operators. For more information, see [JSONB operators](/spanner/docs/reference/postgresql/functions-and-operators#jsonb_operators).\n\nIn your queries, you can include multiple JSON conditions of any type in the\nsearch index. You can also include the JSON conditions in a logical combination\nusing `AND`, `OR`, and `NOT`.\n\n### Check search index usage\n\nTo check that that your query uses a search index, look for a\n*Search index scan* node in the [query execution plan](/spanner/docs/query-execution-plans).\n\nRestrictions\n------------\n\n- Search indexes, including JSON and JSONB search indexes, are used only in read-only transactions. Spanner might use relevant secondary indexes in a read-write transaction. If you attempt to force the use of a search index in a read-write transaction, the following error occurs: `ERROR: spanner: code = \"InvalidArgument\", desc = \"The search index\n AlbumsIndex cannot be used in transactional queries by default.\"`\n- Attempts to store certain large or very complex JSON documents in a search index might return a `too many search token bytes` error. The output token size from this JSON document must be smaller than 10 MB. If you don't need the entire document to be searchable, consider extracting a smaller subset of the document (for example, by using a generated column) and searching over the column instead.\n\nWhat's next\n-----------\n\n- Learn about [tokenization and tokenizers](/spanner/docs/full-text-search/tokenization).\n- Learn about [search indexes](/spanner/docs/full-text-search/search-indexes).\n- Learn about [indexing JSON data](/spanner/docs/working-with-json#index).\n- Learn about [indexing JSONB data](/spanner/docs/working-with-jsonb#index)."]]