Realizar uma pesquisa de substring

Além da correspondência de token completa, os índices de pesquisa do Spanner são compatíveis com pesquisas de substring. Esta página descreve como realizar uma pesquisa de substring como parte de uma pesquisa de texto completo no Spanner.

As pesquisas de substring têm as seguintes características:

  • Não diferencia maiúsculas de minúsculas, descarta a maioria dos sinais de pontuação e normaliza os espaços em branco.
  • Não há segmentação em chinês, japonês e coreano (CJK), já que as consultas parciais em CJK muitas vezes são segmentadas incorretamente.
  • Para vários termos de pesquisa, o resultado precisa conter uma substring de cada termo. Por exemplo, 'happ momen' corresponde a "happy moment", porque ambas as substrings são encontradas no texto. Ele não corresponde a "happy day".

Exemplos

Texto armazenado Consulta de substring Correspondência
Bridge over Troubled Water ridg roub Sim
Bridge over Troubled Water ridg , roub Sim
Bridge over Troubled Water sobre a ponte Sim
Bridge over Troubled Water ponte Sim
Bridge over Troubled Water Ponte ponte ponte Sim
Bridge over Troubled Water bri trou ter Sim
Bridge over Troubled Water bri dge Sim
Bridge over Troubled Water troubledwater Não
Bridge over Troubled Water trubled Não

Para uma pesquisa de substring, use a função TOKENIZE_SUBSTRING na definição da coluna TOKENLIST, conforme mostrado no exemplo de DDL a seguir:

CREATE TABLE Albums (
  AlbumId STRING(MAX) NOT NULL,
  AlbumTitle STRING(MAX),
  AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_SUBSTRING(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);

Na consulta SQL, use a função SEARCH_SUBSTRING na cláusula WHERE. Por exemplo, a consulta a seguir corresponde a um álbum com o título "happy" da tabela criada no exemplo anterior:

SELECT Album
FROM Albums
WHERE SEARCH_SUBSTRING(AlbumTitle_Tokens, 'happ');

TOKENIZE_SUBSTRING gera n-gramas para cada token e armazena esses n-gramas no índice de pesquisa. O comprimento mínimo e máximo de n-gramas a serem gerados é configurado por argumentos opcionais.

Os índices de pesquisa de substring podem usar de 10 a 30 vezes mais armazenamento como índices de texto completo sobre os mesmos dados, porque a tokenização produz muitos mais tokens. Isso é especialmente verdadeiro se a diferença entre ngram_size_min e ngram_size_max aumentar. As consultas de substring também usam mais recursos para serem executadas.

Assim como o TOKENIZE_FULLTEXT, é possível configurar o TOKENIZE_SUBSTRING para usar tipos específicos de conteúdo.

Além da pesquisa de substring básica, SEARCH_SUBSTRING oferece suporte ao modo de pesquisa relativa. Uma pesquisa relativa refina os resultados da pesquisa de substring.

Para ativar o modo de pesquisa relativa, defina o parâmetro TOKENIZE_SUBSTRING relative_search_types como VERDADEIRO.

Quando a pesquisa relativa está ativada na tokenização, SEARCH_SUBSTRING pode executar consultas com os seguintes tipos de pesquisa relativa:

  • phrase: corresponde a substrings contíguas

    Exemplos

    Texto armazenado Consulta de substring. Correspondência
    Bridge over Troubled Water ponte Sim
    Bridge over Troubled Water Ponte ponte ponte Não
    Bridge over Troubled Water brid over Não
    Bridge over Troubled Water crista sobre problemas Sim
    Bridge over Troubled Water ponte sobre problemas Não
    Bridge over Troubled Water idge ove Sim
    Bridge over Troubled Water idge , ove Sim
    Bridge over Troubled Water RIDGE OVE Sim
    Bridge over Troubled Water água da ponte Não
  • value_prefix: corresponde a substrings contíguas, e a correspondência precisa começar no início do valor. Isso é conceitualmente semelhante à função STARTS_WITH para strings normalizadas de maiúsculas e espaços em branco.

    Exemplos

    Texto armazenado Consulta de substring Correspondência
    Bridge over Troubled Water ponte Sim
    Bridge over Troubled Water ponte , over Sim
    Bridge over Troubled Water crista Não
    Bridge over Troubled Water água turva Não
  • value_suffix: corresponde a substrings contíguas e a correspondência precisa ser feita no final do valor. Isso é conceitualmente semelhante à função ENDS_WITH para strings normalizadas de maiúsculas e espaços em branco.

    Exemplos

    Texto armazenado Consulta de substring. Correspondência
    Bridge over Troubled Water água turva Sim
    Bridge over Troubled Water água Sim
    Bridge over Troubled Water água com gás Sim
    Bridge over Troubled Water água Não
    Bridge over Troubled Water água com problemas Não
    Bridge over Troubled Water ponte Não
  • word_prefix: como value_prefix, mas a string precisa corresponder a um limite de termo, não de valor.

    Exemplos

    Texto armazenado Consulta de substring Correspondência
    Bridge over Troubled Water sobre problemas Sim
    Bridge over Troubled Water Over , trouble Sim
    Bridge over Troubled Water água com problemas Não
    Bridge over Troubled Water sobre a água Não
    Bridge over Troubled Water ove Não
    Bridge over Troubled Water ver problemas Sim
  • word_suffix: como value_suffix, mas a string precisa corresponder ao final de um limite de termo.

    Exemplos

    Texto armazenado Consulta de substring Correspondência
    Bridge over Troubled Water ver problemas Sim
    Bridge over Troubled Water sobre problemas Não
    Bridge over Troubled Water sobre a água Não
    Bridge over Troubled Water ove Não

A seguir