Índices de pesquisa JSON

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.

Para mais informações, consulte Índice de dados JSON e Índice de dados JSONB.

Tokenizar JSON e JSONB

É 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.

A seguir