Além da correspondência completa de tokens, os índices de pesquisa do Spanner são compatíveis com pesquisas de substring. Nesta página, descrevemos 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 das pontuações e normaliza espaços em branco.
- Sem segmentação em chinês, japonês e coreano (CJK), já que consultas parciais em CJK geralmente 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 | over brid | Sim |
| Bridge over Troubled Water | ponte ate | 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:
GoogleSQL
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
AlbumTitle STRING(MAX),
AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_SUBSTRING(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsTitleIndex ON Albums(AlbumTitle_Tokens);
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));
CREATE SEARCH INDEX albumstitleindex ON albums(albumtitle_tokens);
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:
GoogleSQL
SELECT AlbumId
FROM Albums
WHERE SEARCH_SUBSTRING(AlbumTitle_Tokens, 'happ');
PostgreSQL
Este exemplo usa
spanner.search_substring.
SELECT albumid
FROM albums
WHERE spanner.search_substring(albumtitle_tokens, 'happ');
O 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 do que os índices de texto completo nos mesmos dados, porque a tokenização produz muito mais tokens. Isso é ainda mais verdadeiro à medida que a diferença entre ngram_size_min e ngram_size_max aumenta. As consultas de substring também usam mais recursos para serem executadas.
Assim como TOKENIZE_FULLTEXT,
é possível configurar o TOKENIZE_SUBSTRING para usar tipos específicos de conteúdo.
Ativar uma pesquisa de substring relativa
Além da pesquisa básica de substring,
SEARCH_SUBSTRING
é compatível com o 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 relative_search_types de
TOKENIZE_SUBSTRING
como uma matriz não vazia com elementos de tipos de pesquisa relativa compatíveis.
Quando a pesquisa relativa está ativada na tokenização, o SEARCH_SUBSTRING pode realizar consultas com os seguintes tipos de pesquisa relativa:
phrase: corresponde a substrings contíguasExemplos
Texto armazenado Consulta de substring. Correspondência Bridge over Troubled Water ponte sobre Sim Bridge over Troubled Water Ponte ponte ponte Não Bridge over Troubled Water ponte Não Bridge over Troubled Water crista sobre problemas Sim Bridge over Troubled Water ponte sobre águas turbulentas 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 precisa começar no início do valor. Isso é conceitualmente semelhante à funçãoSTARTS_WITHpara strings normalizadas de maiúsculas/minúsculas e espaços em branco.Exemplos
Texto armazenado Consulta de substring Correspondência Bridge over Troubled Water ponte sobre Sim Bridge over Troubled Water ponte , sobre Sim Bridge over Troubled Water crista sobre 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çãoENDS_WITHpara strings normalizadas de maiúsculas/minú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 ; agitada Sim Bridge over Troubled Water água turva Sim Bridge over Troubled Water águas turbulentas Não Bridge over Troubled Water água turva Não Bridge over Troubled Water ponte sobre Não word_prefix:comovalue_prefix, mas a string precisa corresponder a um limite de termo, e não de valor.Exemplos
Texto armazenado Consulta de substring Correspondência Bridge over Troubled Water sobre problemas Sim Bridge over Troubled Water Mais de , problema 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: comovalue_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 troubled Sim Bridge over Troubled Water sobre problemas Não Bridge over Troubled Water sobre a água Não Bridge over Troubled Water ove troubled Não
A seguir
- Saiba mais sobre consultas de pesquisa de texto completo.
- Saiba como classificar os resultados da pesquisa.
- Saiba como paginar resultados da pesquisa.
- Saiba como combinar consultas de texto completo e não textuais.
- Saiba como pesquisar em várias colunas.