Además de la concordancia de tokens completa, los índices de búsqueda de Spanner admiten búsquedas de subcadenas. En esta página se describe cómo realizar una búsqueda de subcadenas como parte de una búsqueda de texto completo en Spanner.
Las búsquedas de subcadenas tienen las siguientes características:
- No distingue entre mayúsculas y minúsculas, descarta la mayoría de los signos de puntuación y normaliza los espacios en blanco.
- No se realiza segmentación en chino, japonés ni coreano, ya que las consultas parciales en estos idiomas suelen segmentarse de forma incorrecta.
- Si se usan varios términos de búsqueda, el resultado debe contener una subcadena de cada término. Por ejemplo,
'happ momen'
coincide con"happy moment"
porque ambas subcadenas se encuentran en el texto. No coincide con"happy day"
.
Ejemplos
Texto almacenado | Consulta de subcadena | Match |
---|---|---|
Bridge over Troubled Water | ridg roub | Sí |
Bridge over Troubled Water | ridg , roub | Sí |
Bridge over Troubled Water | sobre puente | Sí |
Bridge over Troubled Water | puente ate | Sí |
Bridge over Troubled Water | Bridge bridge bridge | Sí |
Bridge over Troubled Water | bri trou ter | Sí |
Bridge over Troubled Water | bri dge | Sí |
Bridge over Troubled Water | troubledwater | No |
Bridge over Troubled Water | trubled | No |
Para buscar una subcadena, usa la función TOKENIZE_SUBSTRING
en la definición de la columna TOKENLIST
, tal como se muestra en el siguiente ejemplo de DDL:
GoogleSQL
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
AlbumTitle STRING(MAX),
AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_SUBSTRING(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);
PostgreSQL
En este ejemplo se usa
spanner.tokenize_substring
.
CREATE TABLE albums (
albumid character varying NOT NULL,
albumtitle character varying,
albumtitle_tokens spanner.tokenlist
GENERATED ALWAYS AS (spanner.tokenize_substring(albumtitle)) VIRTUAL HIDDEN,
PRIMARY KEY(albumid));
En la consulta SQL, usa la función SEARCH_SUBSTRING
en la cláusula WHERE
. Por ejemplo, la siguiente consulta coincide con un álbum con el título "happy" de la tabla creada en el ejemplo anterior:
GoogleSQL
SELECT Album
FROM Albums
WHERE SEARCH_SUBSTRING(AlbumTitle_Tokens, 'happ');
PostgreSQL
En este ejemplo se usa
spanner.search_substring
.
SELECT album
FROM albums
WHERE spanner.search_substring(albumtitle_tokens, 'happ');
TOKENIZE_SUBSTRING
genera n-gramos
para cada token y los almacena en el índice de búsqueda. La longitud mínima y máxima de los n-gramas que se van a generar se configuran mediante argumentos opcionales.
Los índices de búsqueda de subcadenas pueden usar entre 10 y 30 veces más almacenamiento que los índices de texto completo con los mismos datos, ya que la tokenización genera muchos más tokens. Esto es especialmente cierto si la diferencia entre ngram_size_min
y ngram_size_max
aumenta. Las consultas de subcadenas también usan más recursos para ejecutarse.
Al igual que TOKENIZE_FULLTEXT
,
puedes configurar TOKENIZE_SUBSTRING
para que use tipos de contenido específicos.
Habilitar una búsqueda de subcadena relativa
Además de la búsqueda básica de subcadenas, SEARCH_SUBSTRING
admite el modo de búsqueda relativa. Una búsqueda relativa refina los resultados de la búsqueda de subcadenas.
Para habilitar el modo de búsqueda relativa, asigna al parámetro relative_search_types
de
TOKENIZE_SUBSTRING
un array no vacío con elementos de tipos de búsqueda relativa admitidos.
Cuando la búsqueda relativa está habilitada en la tokenización, SEARCH_SUBSTRING
puede realizar consultas con los siguientes tipos de búsqueda relativa:
phrase
: coincide con subcadenas contiguasEjemplos
Texto almacenado Consulta de subcadena. Match Bridge over Troubled Water puente sobre Sí Bridge over Troubled Water Bridge bridge bridge No Bridge over Troubled Water brid over No Bridge over Troubled Water cresta sobre problema Sí Bridge over Troubled Water Bridge Over Troubled No Bridge over Troubled Water idge ove Sí Bridge over Troubled Water idge , ove Sí Bridge over Troubled Water RIDGE OVE Sí Bridge over Troubled Water agua de puente No value_prefix
: coincide con subcadenas contiguas y la coincidencia debe empezar al principio del valor. Conceptualmente, es similar a la funciónSTARTS_WITH
para cadenas normalizadas en cuanto a las mayúsculas y los espacios en blanco.Ejemplos
Texto almacenado Consulta de subcadena Match Bridge over Troubled Water puente sobre Sí Bridge over Troubled Water puente , sobre Sí Bridge over Troubled Water cresta No Bridge over Troubled Water aguas turbulentas No value_suffix
: coincide con las subcadenas contiguas y la coincidencia debe producirse al final del valor. Conceptualmente, es similar a la funciónENDS_WITH
para cadenas normalizadas en cuanto a las mayúsculas y los espacios en blanco.Ejemplos
Texto almacenado Consulta de subcadena. Match Bridge over Troubled Water aguas turbulentas Sí Bridge over Troubled Water turbia ; agua Sí Bridge over Troubled Water agua turbia Sí Bridge over Troubled Water aguas turbulentas No Bridge over Troubled Water agua turbia No Bridge over Troubled Water puente sobre No word_prefix:
es comovalue_prefix
, pero la cadena tiene que coincidir con un límite de término (en lugar de un límite de valor).Ejemplos
Texto almacenado Consulta de subcadena Match Bridge over Troubled Water superar los problemas Sí Bridge over Troubled Water Over , trouble Sí Bridge over Troubled Water agua turbia No Bridge over Troubled Water sobre el agua No Bridge over Troubled Water ove troubled No Bridge over Troubled Water ver troubled Sí word_suffix
: comovalue_suffix
, pero la cadena debe coincidir al final de un límite de término.Ejemplos
Texto almacenado Consulta de subcadena Match Bridge over Troubled Water ver troubled Sí Bridge over Troubled Water superar los problemas No Bridge over Troubled Water sobre el agua No Bridge over Troubled Water ove troubled No
Siguientes pasos
- Consulta información sobre las consultas de búsqueda de texto completo.
- Consulta cómo clasificar los resultados de búsqueda.
- Consulta cómo paginar los resultados de búsqueda.
- Consulta cómo combinar consultas de texto completo y consultas que no son de texto.
- Consulta cómo buscar en varias columnas.