En esta página, se describe cómo realizar una búsqueda que combina texto completo y no textual de datos no estructurados.
Realizar una búsqueda combinada de texto completo y no textual
Compatibilidad con índices de búsqueda
texto completo, concordancia exacta y columnas numéricas. Puedes combinar texto y no texto
en la cláusula WHERE
de manera similar a las búsquedas de varias columnas. El
el optimizador de consultas intenta optimizar predicados que no son de texto con un índice de búsqueda. Si
imposible, Spanner evalúa el estado de cada fila
que coincida con el índice de búsqueda. Las columnas a las que se hace referencia no se almacenan en el índice de búsqueda
se recuperan de la tabla base.
Por ejemplo, considera el siguiente ejemplo:
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;
El comportamiento de las consultas en esta tabla incluye los siguientes aspectos:
Rating
yGenres
se incluyen en el índice de búsqueda. Spanner acelera las condiciones mediante la publicación del índice de búsqueda listas.SELECT Album FROM Albums WHERE Rating > 4 AND ARRAY_INCLUDES_ANY(Genres, ['jazz'])
La consulta puede combinar conjunciones, disyunciones y negaciones de cualquier manera, incluida la combinación de predicados de texto completo y no texto. Esta consulta está completamente y acelerar el índice de búsqueda.
SELECT Album FROM Albums WHERE (SEARCH(Title_Tokens, 'car') OR Rating > 4) AND NOT ARRAY_INCLUDES_ANY(Genres, ['jazz'])
Likes
se almacena en el índice, pero el esquema no solicita Spanner crea un índice de tokens para sus valores posibles. Por lo tanto, el predicado de texto completo enTitle
y el predicado no textual enRating
está acelerado, pero el predicado enLikes
no. En Spanner, la consulta recupera todos los documentos con el término “auto” enTitle
y una calificación superior a 4, filtra los documentos que que no tengan al menos 1000 Me gusta. Esta consulta consume muchos recursos si está casi todos los álbumes contienen la palabra "auto". en el título y casi todos tienen un calificación de 5, pero pocos álbumes tienen 1000 Me gusta. En esos casos, la indexaciónLikes
, de manera similar aRating
, ahorra recursos.SELECT Album FROM Albums WHERE SEARCH(Title_Tokens, 'car') AND Rating > 4 AND Likes >= 1000
Cover
no se almacena en el índice. La siguiente consulta realiza una reversión de la unión entreAlbumsIndex
yAlbums
para recuperarCover
de todos los álbumes que coincidan.SELECT AlbumId, Cover FROM Albums WHERE SEARCH(Title_Tokens, 'car') AND Rating > 4
¿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 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 más información sobre cómo buscar en varias columnas.