Esta página descreve como realizar uma pesquisa que combina texto completo e não texto dados.
Realizar uma pesquisa mista de texto completo e não textual
Pesquisar índices
texto completo, correspondência exata e colunas numéricas. Você pode combinar texto e não texto
condições na cláusula WHERE
de forma semelhante às consultas de pesquisa de várias colunas. O otimizador de consulta tenta otimizar predicados que não são de texto com um índice de pesquisa. Se
impossível, o Spanner avalia a condição para cada linha
que corresponda ao índice de pesquisa. As colunas referenciadas que não são armazenadas no índice de pesquisa
são extraídas da tabela base.
Por exemplo, considere o seguinte exemplo:
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
Title STRING(MAX),
Rating FLOAT64,
Genres ARRAY<STRING(MAX)>,
Likes INT64,
Cover BYTES(MAX),
Title_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(Title)) HIDDEN,
Rating_Tokens TOKENLIST AS (TOKENIZE_NUMBER(Rating)) HIDDEN,
Genres_Tokens TOKENLIST AS (TOKEN(Genres)) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsIndex
ON Albums(Title_Tokens, Rating_Tokens, Genres_Tokens)
STORING Likes;
O comportamento das consultas nessa tabela inclui o seguinte:
Rating
eGenres
estão incluídos no índice de pesquisa. O Spanner acelera condições usando publicação de índice de pesquisa listas.SELECT Album FROM Albums WHERE Rating > 4 AND ARRAY_INCLUDES_ANY(Genres, ['jazz'])
A consulta pode combinar conjunções, disjunções e negações de qualquer maneira, inclusive misturando predicados de texto completo e não de texto. Essa consulta é totalmente acelerados pelo índice de pesquisa.
SELECT Album FROM Albums WHERE (SEARCH(Title_Tokens, 'car') OR Rating > 4) AND NOT ARRAY_INCLUDES_ANY(Genres, ['jazz'])
Likes
está armazenado no índice, mas o esquema não solicita o Spanner criar um índice de token para os possíveis valores. Portanto, o predicado de texto completo emTitle
e o predicado sem texto emRating
é acelerado, mas o predicado emLikes
não é. No Spanner, a consulta recupera todos os documentos com o termo "car" noTitle
e uma classificação maior que 4. Em seguida, ela filtra os documentos que não têm pelo menos 1.000 curtidas. Essa consulta usa muitos recursos se quase todos os álbuns tiverem o termo "car" no título e quase todos tiverem uma classificação de 5, mas poucos álbuns tiverem 1.000 curtidas. Nesses casos, a indexaçãoLikes
da mesma forma queRating
economiza recursos.SELECT Album FROM Albums WHERE SEARCH(Title_Tokens, 'car') AND Rating > 4 AND Likes >= 1000
Cover
não é armazenado no índice. A consulta a seguir faz uma back join (link em inglês) entreAlbumsIndex
eAlbums
para buscarCover
de todos os álbuns correspondentes.SELECT AlbumId, Cover FROM Albums WHERE SEARCH(Title_Tokens, 'car') AND Rating > 4
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 pesquisar várias colunas.