Los índices de búsqueda pueden indexar tener varias columnas con asignación de token, lo que hace que las consultas en ellas sean más eficientes. Esta describe cómo realizar una búsqueda en varias columnas, que es un tipo de búsqueda en el texto completo.
Realiza una búsqueda de varias columnas
La estructura del índice de búsqueda garantiza que las consultas no necesiten una unión distribuida, lo que garantiza un rendimiento predecible de las consultas. Se evita la unión distribuida debido a la colocalización de todos los tokens que corresponden a una fila de la tabla base en la misma división.
Por ejemplo, considera el siguiente 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);
Ahora, una consulta puede buscar en ambos campos:
SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, "fifth symphony")
AND SEARCH(Studio_Tokens, "Blue Note Studio")
Spanner admite búsquedas de varias columnas en conjunto,
disyunción y negación en la cláusula WHERE
. Puedes usar todos los siguientes tipos de consultas con un índice de búsqueda:
Conjunción: busca documentos en los que
Title
contenga el término "auto". yStudio
tiene el término "sol".SELECT AlbumId FROM Albums WHERE SEARCH(Title_Tokens, 'car') AND SEARCH(Studio_Tokens, 'sun')
Disyunción: Busca documentos en los que
Title
tenga el término "auto" oStudio
tenga el término "sol".SELECT AlbumId FROM Albums WHERE SEARCH(Title_Tokens, 'car') OR SEARCH(Studio_Tokens, 'sun')
Negación: Busca todos los documentos donde
Title
no contenga el término. “auto”.SELECT AlbumId FROM Albums WHERE NOT SEARCH(Title_Tokens, 'car')
El lenguaje rquery realizar el mismo tipo de búsquedas:
SELECT AlbumId FROM Albums WHERE SEARCH(Title_Tokens, '-car')
Ambos formularios filtran documentos en los que
Title
es NULL. Las funciones de tokenización y búsqueda se definen para mostrar NULL en la entrada NULL. SQL define NOT NULL como NULL.
Además, puedes hacer referencia a la misma columna TOKENLIST
varias veces.
SELECT AlbumId
FROM Albums
WHERE (SEARCH(Title_Tokens, 'car') OR SEARCH(Studio_Tokens, 'sun'))
AND (SEARCH(Title_Tokens, 'guy') OR SEARCH(Studio_Tokens, electric))
Usa el lenguaje rquery o SQL para buscar varios términos en la misma columna. Se recomienda rquery debido a su caché de consultas eficiente para consultas parametrizadas. Además de tener una mejor tasa de aciertos de la caché de consultas, los lenguajes SQL y rquery tienen las mismas tasas de latencia y rendimiento.
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')
Puedes usar condiciones que no sean de texto aceleradas con índices de búsqueda con funciones de búsqueda de texto completo.
¿Qué sigue?
- Obtén más información sobre las búsquedas en el texto completo.
- Obtenga información sobre cómo clasificar los resultados de la búsqueda.
- Obtén más información para realizar una búsqueda de substring.
- Obtén información sobre cómo paginar los resultados de la búsqueda.
- Obtén información para combinar consultas de texto completo y no de texto.