Os índices de pesquisa podem indexar várias colunas tokenizadas, tornando as consultas nessas colunas mais eficientes. Esta página descreve como realizar uma pesquisa em várias colunas, que é um tipo de pesquisa de texto completo.
Realizar uma pesquisa em várias colunas
A estrutura do índice de pesquisa garante que as consultas não precisem de uma mesclagem distribuída, garantindo o desempenho previsível das consultas. A mesclagem distribuída é evitada devido à colocalização de todos os tokens que correspondem a uma linha de tabela base na mesma divisão.
Por exemplo, considere o seguinte esquema:
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
Title STRING(MAX),
Studio STRING(MAX),
Title_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(Title)) HIDDEN,
Studio_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(Studio)) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsIndex ON Albums(Title_Tokens, Studio_Tokens);
Agora, uma consulta pode pesquisar os dois campos:
SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, "fifth symphony")
AND SEARCH(Studio_Tokens, "Blue Note Studio")
O Spanner oferece suporte a consultas de pesquisa com várias colunas em operadores de união,
disjunção e negação na cláusula WHERE
. É possível usar todos
os seguintes tipos de consultas com um índice de pesquisa:
Conjunção: encontre documentos em que
Title
tem o termo "carro" eStudio
tem o termo "sol".SELECT AlbumId FROM Albums WHERE SEARCH(Title_Tokens, 'car') AND SEARCH(Studio_Tokens, 'sun')
Disjunção: encontre documentos em que
Title
tenha o termo "car" ouStudio
tenha o termo "sun".SELECT AlbumId FROM Albums WHERE SEARCH(Title_Tokens, 'car') OR SEARCH(Studio_Tokens, 'sun')
Negação: encontre todos os documentos em que
Title
não contém o termo "car".SELECT AlbumId FROM Albums WHERE NOT SEARCH(Title_Tokens, 'car')
A linguagem rquery pode realizar o mesmo tipo de pesquisa:
SELECT AlbumId FROM Albums WHERE SEARCH(Title_Tokens, '-car')
Ambos os formulários filtram documentos em que
Title
é NULL. A tokenização e as funções de pesquisa são definidas para retornar NULL na entrada NULL. O SQL define NOT NULL como NULL.
Além disso, é possível fazer referência à mesma coluna TOKENLIST
várias vezes.
SELECT AlbumId
FROM Albums
WHERE (SEARCH(Title_Tokens, 'car') OR SEARCH(Studio_Tokens, 'sun'))
AND (SEARCH(Title_Tokens, 'guy') OR SEARCH(Studio_Tokens, electric))
Use a linguagem rquery ou o SQL para pesquisar vários termos na mesma coluna. A rquery é recomendada devido ao armazenamento em cache eficiente de consultas para consultas parametrizadas. Além da melhor taxa de ocorrência em cache de consulta, as linguagens rquery e SQL têm as mesmas taxas de latência e desempenho.
SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, 'car OR guy')
SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, 'car') OR SEARCH(Title_Tokens, 'guy')
É possível usar condições não textuais aceleradas com índices de pesquisa com funções de pesquisa de texto completo.
A seguir
- Saiba mais sobre consultas de pesquisa de texto completo.
- Saiba como classificar os resultados da pesquisa.
- Saiba como realizar uma pesquisa de substring.
- Saiba como paginar os resultados da pesquisa.
- Saiba como combinar consultas de texto completo e não de texto.