Busca varias columnas en los índices de búsqueda

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.

La estructura de la búsqueda índice garantiza que las consultas no necesiten una unión distribuida, lo que garantiza el rendimiento de las consultas. Se evita la unión distribuida debido al la colocació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);

Una consulta ahora puede buscar en ambos campos:

SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, @p1) AND SEARCH(Studio_Tokens, @p2)

Spanner admite consultas de búsqueda de varias columnas en operadores de conjunción, disyunción y negación en la cláusula WHERE. Puedes usar todas los siguientes tipos de consultas con un índice de búsqueda:

  • Conjunción: busca documentos en los que Title contenga el término "auto". y Studio 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" o Studio 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 puede realizar el mismo tipo de búsquedas:

    SELECT AlbumId
    FROM Albums
    WHERE SEARCH(Title_Tokens, '-car')
    

    Ambos formularios filtran los documentos en los que Title es NULO. La asignación de token y las funciones de búsqueda se definen para devolver NULL en la entrada NULL. SQL define NOT NULL as 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 usar rquery debido a su eficiente almacenamiento en caché de consultas en consultas con parámetros. Además de tener una mejor tasa de aciertos de la caché de consultas, los lenguajes SQL y rquery tienen las mismas tasas de rendimiento y latencia.

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 son de texto aceleradas con índices de búsqueda con texto completo las funciones de búsqueda.

¿Qué sigue?