Índices de pesquisa JSON

Além de indexar texto, o índice da Pesquisa do Spanner search index oferece uma maneira eficiente de indexar e consultar documentos JSON e JSONB. Use índices da Pesquisa para consultas JSON e JSONB independentes ou para aumentar outras consultas de pesquisa de texto completo.

Para mais informações, consulte Indexar dados JSON e Indexar 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 da Pesquisa para acelerar consultas que incluem comparações de igualdade, contenção JSON e existência de chave condições:

  • Comparações de igualdade determinam se um documento JSON ou um subcaminho dentro de um documento JSON é igual a um valor de destino.
  • Contenção JSON determina se um documento JSON está contido em outro.
  • Existência de chave determina se uma chave ou caminho existe em um documento JSON.

É possível expressar essas condições em cada dialeto da seguinte maneira:

  • No GoogleSQL:

    • Construa predicados de igualdade usando os =, !=, <>, IN, e NOT IN operadores em uma coluna JSON indexada ou um subcaminho extraído com os operadores de acesso a campos e subscritos. Por exemplo, doc = JSON '{"a": 1}', doc.sub.path[0].key = "value", ou doc.status IN ("active", "pending"). Outros operadores de comparação como <, <=, >, e >= não são acelerados por índices da Pesquisa JSON.
    • Expresse a contenção JSON no esquema usando a JSON_CONTAINS função.
    • Construa condições de existência de chave usando o acesso a campos, operadores de subscritos de matriz e IS NOT NULL. Os operadores de acesso a campos e subscritos de matriz descrevem um caminho de documento JSON. IS NOT NULL verifica a existência de esse caminho (por exemplo, doc.sub.path[@index].key IS NOT NULL).
  • No PostgreSQL:

    • Construa predicados de igualdade usando os =, !=, <>, IN, e NOT IN operadores em uma coluna JSONB indexada ou um subcaminho extraído com o -> operador. Por exemplo, doc = '{"a": 1}'::jsonb, doc->'sub'->0->'key' = '"value"'::jsonb ou doc->'status' IN ('"active"'::jsonb, '"pending"'::jsonb). Outros operadores de comparação, como <, <=, >, e >=, bem como predicados de extração de texto que usam ->>, não são acelerados por índices de pesquisa JSONB.
    • Expresse a contenção JSONB usando os @> e <@ operadores. Para mais informações, consulte Operadores JSONB.
    • Construa 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 da 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 da Pesquisa

Para verificar se a consulta usa um índice da Pesquisa, procure um nó Verificação do índice da Pesquisa no plano de execução da consulta.

Restrições

  • Os índices da Pesquisa, incluindo í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 da Pesquisa em uma transação de leitura e gravação, o seguinte erro 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 da 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 precisar que o documento inteiro seja pesquisável, considere extrair um subconjunto menor do documento (por exemplo, usando uma coluna gerada) e pesquisar na coluna.

A seguir