Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Além de indexar texto, o índice de pesquisa do Spanner
oferece uma maneira eficiente de indexar e consultar documentos JSON e JSONB. Use
índices de pesquisa para consultas JSON e JSONB independentes ou para aumentar outras
consultas de pesquisa de texto completo.
É possível usar a função TOKENIZE_JSON para criar um índice JSON no
GoogleSQL ou a função TOKENIZE_JSONB para criar um índice JSONB no
PostgreSQL. Para mais detalhes, consulte TOKENIZE_JSON
e TOKENIZE_JSONB.
Consultas JSON e JSONB
É possível usar um índice de pesquisa para acelerar consultas que incluem
contenção JSON e condições de existência de chaves. O contenção de JSON determina
se um documento JSON está contido em outro. A existência da chave determina se uma
chave existe no esquema do banco de dados.
No GoogleSQL:
Expresse a contenção JSON no seu esquema usando a função
JSON_CONTAINS.
Crie condições de existência de chave usando o acesso de campo, operadores de subscripto
de matriz e IS NOT NULL. Os operadores de acesso a campos e de subscrito de matriz
descrevem um caminho de documento JSON. IS NOT NULL verifica a existência
deste caminho (por exemplo, doc.sub.path[@index].key IS NOT NULL).
No PostgreSQL:
Expresse a contenção de JSONB usando os operadores @> e <@. Para mais
informações, consulte Operadores JSONB.
Crie condições de existência de chave usando os operadores ?, ?| e ?&.
Para mais informações, consulte Operadores JSONB.
Nas consultas, é possível incluir várias condições JSON de qualquer tipo no
índice de pesquisa. Também é possível incluir as condições JSON em uma combinação lógica
usando AND, OR e NOT.
Verificar o uso do índice de pesquisa
Para verificar se a consulta usa um índice de pesquisa, procure um nó de verificação de índice de pesquisa no plano de execução da consulta.
Restrições
Os índices de pesquisa, incluindo os índices de pesquisa JSON e JSONB, são usados apenas em
transações somente leitura. O Spanner pode usar índices secundários relevantes
em uma transação de leitura e gravação. Se você tentar forçar o uso de um
índice de pesquisa em uma transação de leitura e gravação, o seguinte erro vai ocorrer:
ERROR: spanner: code = "InvalidArgument", desc = "The search index
AlbumsIndex cannot be used in transactional queries by default."
As tentativas de armazenar determinados documentos JSON grandes ou muito complexos em um
índice de pesquisa podem retornar um erro too many search token bytes. O tamanho do token de saída desse documento JSON precisa ser menor que 10 MB. Se você não
precisa que todo o documento seja pesquisável, extraia um subconjunto
menor do documento (por exemplo, usando uma coluna gerada) e
pesquise na coluna.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-09-05 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)."]]