Fazer uma pesquisa de substring

Além da correspondência total de tokens, os índices de pesquisa do Spanner suportam pesquisas de subcadeias. Esta página descreve como realizar uma pesquisa de subcadeias de carateres como parte de uma pesquisa de texto completo no Spanner.

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

  • Não é sensível a maiúsculas e minúsculas, ignora a maioria da pontuação e normaliza os espaços em branco.
  • Sem segmentação em chinês, japonês e coreano (CJK), uma vez que as consultas CJK parciais são frequentemente segmentadas incorretamente.
  • Para vários termos de pesquisa, o resultado tem de conter uma substring de cada termo. Por exemplo, 'happ momen' corresponde a "happy moment", porque ambas as subcadeias de carateres são encontradas no texto. 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 over brid Sim
Bridge over Troubled Water ponte ate Sim
Bridge over Troubled Water Bridge bridge bridge 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 seguinte:

GoogleSQL

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

PostgreSQL

Este exemplo usa spanner.tokenize_substring.

CREATE TABLE albums (
albumid character varying NOT NULL,
albumtitle character varying,
albumtitle_tokens spanner.tokenlist
    GENERATED ALWAYS AS (spanner.tokenize_substring(albumtitle)) VIRTUAL HIDDEN,
PRIMARY KEY(albumid));

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

GoogleSQL

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

PostgreSQL

Este exemplo usa spanner.search_substring.

SELECT album
FROM albums
WHERE spanner.search_substring(albumtitle_tokens, 'happ');

TOKENIZE_SUBSTRING gera n-gramas para cada token e armazena estes n-gramas no índice de pesquisa. O comprimento mínimo e máximo dos n-gramas a gerar são configurados através de argumentos opcionais.

Os índices de pesquisa de subcadeias podem usar 10 a 30 vezes mais armazenamento do que os índices de texto completo nos mesmos dados, porque a tokenização produz muito mais tokens. Isto é especialmente verdade se a diferença entre ngram_size_min e ngram_size_max aumentar. As consultas de subcadeias também usam mais recursos para execução.

Tal como TOKENIZE_FULLTEXT, pode configurar o TOKENIZE_SUBSTRING para usar tipos específicos de conteúdo.

Além da pesquisa de subcadeias básica, o SEARCH_SUBSTRING é compatível com o modo de pesquisa relativa. Uma pesquisa relativa restringe os resultados da pesquisa de subcadeias de carateres.

Para ativar o modo de pesquisa relativa, defina o parâmetro relative_search_types de TOKENIZE_SUBSTRING para uma matriz não vazia com elementos de tipos de pesquisa relativa suportados.

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

  • phrase: corresponde a subcadeias contíguas

    Exemplos

    Texto armazenado Consulta de substring. Correspondência
    Bridge over Troubled Water passar por cima Sim
    Bridge over Troubled Water Bridge bridge bridge Não
    Bridge over Troubled Water brid over Não
    Bridge over Troubled Water ridge over trouble Sim
    Bridge over Troubled Water bridge ove troubled 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 ponte de água Não
  • value_prefix: corresponde a substrings contíguas e a correspondência tem de começar no início do valor. Isto é conceptualmente semelhante à função STARTS_WITH para strings normalizadas em termos de capitalização e espaços em branco.

    Exemplos

    Texto armazenado Consulta de substring Correspondência
    Bridge over Troubled Water passar por cima Sim
    Bridge over Troubled Water ponte , sobre Sim
    Bridge over Troubled Water cobre Não
    Bridge over Troubled Water água agitada Não
  • value_suffix: corresponde a substrings contíguas e a correspondência tem de ocorrer no final do valor. Isto é conceptualmente semelhante à função ENDS_WITH para strings normalizadas em termos de maiúsculas/minúsculas e espaços em branco.

    Exemplos

    Texto armazenado Consulta de substring. Correspondência
    Bridge over Troubled Water água agitada Sim
    Bridge over Troubled Water água ; turva Sim
    Bridge over Troubled Water água turva Sim
    Bridge over Troubled Water troubled wate Não
    Bridge over Troubled Water água turva Não
    Bridge over Troubled Water passar por cima Não
  • word_prefix:, como value_prefix, mas a string tem de corresponder a um limite de termo (em vez de um limite de valor).

    Exemplos

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

    Exemplos

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

O que se segue?