Realizar uma pesquisa de substring

Além da correspondência completa de tokens, o Spanner pesquisar índices dão suporte a pesquisas de substring. Esta página descreve como realizar uma pesquisa de substring como parte de uma pesquisa de texto completo no Spanner.

Visão geral

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 há consultas CJK parciais costumam segmentar 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 ambos substrings são encontradas no texto. Ele não corresponde a "happy day".

Exemplos

Texto armazenado Consulta de substring Correspondência
Ponte sobre águas turbulentas Ridg Roub Sim
Bridge over Troubled Water ridg , roub Sim
Bridge over Troubled Water sobre brid Sim
Ponte sobre águas turbulentas ponte Sim
Ponte sobre águas turbulentas Ponte ponte ponte Sim
Bridge over Troubled Water Bri Trou Ter Sim
Ponte sobre águas turbulentas bri dge Sim
Bridge over Troubled Water Água perturbada Não
Bridge over Troubled Water problemas 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-grams. para cada token e armazena esses n-gramas no índice de pesquisa. O mínimo e o tamanho máximo de n-gramas a serem gerados são configurados por argumentos opcionais.

Os índices de pesquisa de substring podem usar de 10 a 30 vezes mais armazenamento que os índices de texto completo os mesmos dados, porque a tokenização produz muito mais tokens. Isso é especialmente verdadeiro como a diferença entre ngram_size_min e ngram_size_max cresce. 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 TOKENIZE_SUBSTRING relative_search_types como TRUE.

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
    Ponte sobre águas turbulentas ponte sobre Sim
    Ponte sobre águas turbulentas Ponte ponte Não
    Bridge over Troubled Water brid over Não
    Bridge over Troubled Water crista sobre problemas Sim
    Bridge over Troubled Water Bridge Ove perturbado Não
    Ponte sobre águas turbulentas idge ove Sim
    Ponte sobre águas turbulentas idge , ove Sim
    Bridge over Troubled Water RODÉVIA 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
    Ponte sobre águas turbulentas ponte sobre Sim
    Bridge over Troubled Water ponte , sobre Sim
    Ponte sobre águas turbulentas crista Não
    Bridge over Troubled Water água turbulenta Não
  • value_suffix: corresponde a substrings contíguas, e a correspondência precisa corresponder a no final do valor. Conceitualmente, isso é semelhante ao método ENDS_WITH para strings normalizadas com letras maiúsculas e minúsculas e espaços.

    Exemplos

    Texto armazenado Consulta de substring. Correspondência
    Ponte sobre águas turbulentas água turva Sim
    Ponte sobre águas turbulentas água ; água Sim
    Bridge over Troubled Water água rublado Sim
    Bridge over Troubled Water Wate perturbado Não
    Bridge over Troubled Water Água perturbadora Não
    Ponte sobre águas turbulentas ponte sobre Não
  • word_prefix: como value_prefix, mas a string precisa corresponder a um termo (em vez de um limite de valor).

    Exemplos

    Texto armazenado Consulta de substring Correspondência
    Ponte sobre águas turbulentas acima do problema Sim
    Bridge over Troubled Water Over , trouble Sim
    Bridge over Troubled Water água com problemas Não
    Ponte sobre águas turbulentas sobre a água Não
    Ponte sobre águas turbulentas CANNOT TRANSLATE 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
    Ponte sobre águas turbulentas ver problemas Sim
    Ponte sobre águas turbulentas sobre problemas Não
    Ponte sobre águas turbulentas sobre a água Não
    Ponte sobre águas turbulentas CANNOT TRANSLATE Não

A seguir