Índices de pesquisa JSON

Além de indexar texto, o índice de pesquisa do Spanner oferece uma forma eficiente de indexar e consultar documentos JSON e JSONB. Use índices de pesquisa para consultas JSON e JSONB autónomas ou para aumentar outras consultas de pesquisa de texto completo.

Para mais informações, consulte os artigos Indexar dados JSON e Indexar dados JSONB.

Tokenize JSON e JSONB

Pode 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 obter detalhes, consulte TOKENIZE_JSON e TOKENIZE_JSONB.

Consultas JSON e JSONB

Pode usar um índice de pesquisa para acelerar as consultas que incluem condições de contenção de JSON e existência de chaves. A contenção JSON determina se um documento JSON está contido noutro. A existência de chaves determina se existe uma chave no esquema da base de dados.

  • No GoogleSQL:

    • Expresse a contenção JSON no seu esquema através da função JSON_CONTAINS.
    • Construa condições de existência de chaves usando o acesso a campos, os operadores de subscrição de matrizes e IS NOT NULL. Os operadores de acesso a campos e de subscrição de matrizes 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:

    • Exprimir a contenção JSONB através dos operadores @> e <@. Para mais informações, consulte os operadores JSONB.
    • Construa condições de existência de chaves usando os operadores ?, ?| e ?&. Para mais informações, consulte os operadores JSONB.

Nas suas consultas, pode incluir várias condições JSON de qualquer tipo no índice de pesquisa. Também pode incluir as condições JSON numa combinação lógica usando AND, OR e NOT.

Verifique a utilização do índice de pesquisa

Para verificar se a sua consulta usa um índice de pesquisa, procure um nó Search index scan 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 de leitura. O Spanner pode usar índices secundários relevantes numa transação de leitura/escrita. Se tentar forçar a utilização de um índice de pesquisa numa transação de leitura/escrita, ocorre o seguinte erro: 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 num índice de pesquisa podem devolver um erro too many search token bytes. O tamanho do token de saída deste documento JSON tem de ser inferior a 10 MB. Se não precisar que todo o documento seja pesquisável, considere extrair um subconjunto mais pequeno do documento (por exemplo, através de uma coluna gerada) e pesquisar na coluna.

O que se segue?