Además de la coincidencia completa de tokens, 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 mayúsculas de minúsculas, descarta la mayoría de los signos de puntuación y normaliza los espacios en blanco.
- No hay segmentación en chino, japonés ni coreano (CJK), ya que las búsquedas parciales en CJK suelen segmentarse de forma incorrecta.
- En el caso de 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 | Coincidencia |
|---|---|---|
| Bridge over Troubled Water | ridg roub | Sí |
| Bridge over Troubled Water | ridg , roub | Sí |
| Bridge over Troubled Water | sobre el puente | Sí |
| Bridge over Troubled Water | puente de escritura | Sí |
| Bridge over Troubled Water | Puente, puente, puente | Sí |
| Bridge over Troubled Water | bri trou ter | Sí |
| Bridge over Troubled Water | puente | Sí |
| Bridge over Troubled Water | troubledwater | No |
| Bridge over Troubled Water | trubled | No |
Para una búsqueda de subcadena, usa la función TOKENIZE_SUBSTRING en la definición de la columna TOKENLIST, 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);
CREATE SEARCH INDEX AlbumsTitleIndex ON Albums(AlbumTitle_Tokens);
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));
CREATE SEARCH INDEX albumstitleindex ON albums(albumtitle_tokens);
En la consulta en 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 AlbumId
FROM Albums
WHERE SEARCH_SUBSTRING(AlbumTitle_Tokens, 'happ');
PostgreSQL
En este ejemplo, se usa spanner.search_substring.
SELECT albumid
FROM albums
WHERE spanner.search_substring(albumtitle_tokens, 'happ');
TOKENIZE_SUBSTRING genera n-gramas 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 generarán se configura a través de 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 sobre los mismos datos, ya que la tokenización produce muchos más tokens. Esto es especialmente cierto a medida que crece la diferencia entre ngram_size_min y ngram_size_max. 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.
Habilita 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, establece el parámetro relative_search_types de TOKENIZE_SUBSTRING en 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 búsquedas con los siguientes tipos de búsqueda relativa:
phrase: Coincide con subcadenas contiguas.Ejemplos
Texto almacenado Es una consulta de subcadena. Coincidencia Bridge over Troubled Water Puente sobre Sí Bridge over Troubled Water Puente, puente, puente No Bridge over Troubled Water Puente No Bridge over Troubled Water Cresta sobre problemas Sí Bridge over Troubled Water Puente sobre aguas turbulentas 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 comenzar al principio del valor. Esto es conceptualmente similar a la funciónSTARTS_WITHpara cadenas normalizadas en cuanto a mayúsculas y minúsculas y espacios en blanco.Ejemplos
Texto almacenado Consulta de subcadena Coincidencia 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 subcadenas contiguas, y la coincidencia debe darse al final del valor. Esto es conceptualmente similar a la funciónENDS_WITHpara cadenas normalizadas en cuanto a mayúsculas y minúsculas y espacios en blanco.Ejemplos
Texto almacenado Es una consulta de subcadena. Coincidencia Bridge over Troubled Water aguas turbulentas Sí Bridge over Troubled Water agua turbia Sí Bridge over Troubled Water Agua turbia Sí Bridge over Troubled Water Aguas problemáticas No Bridge over Troubled Water agua turbia No Bridge over Troubled Water Puente sobre No word_prefix:es similar avalue_prefix, pero la cadena debe coincidir en un límite de término (en lugar de un límite de valor).Ejemplos
Texto almacenado Consulta de subcadena Coincidencia Bridge over Troubled Water sobre problemas Sí Bridge over Troubled Water Más de 1000 m , problemas Sí Bridge over Troubled Water agua turbia No Bridge over Troubled Water Sobre el agua No Bridge over Troubled Water con problemas 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 Coincidencia Bridge over Troubled Water ver troubled Sí Bridge over Troubled Water sobre problemas No Bridge over Troubled Water Sobre el agua No Bridge over Troubled Water con problemas No
¿Qué sigue?
- Obtén más información sobre las consultas de búsqueda de texto completo.
- Obtén más información para clasificar los resultados de la búsqueda.
- Obtén más información para paginar los resultados de la búsqueda.
- Obtén más información para combinar búsquedas de texto completo y búsquedas que no son de texto.
- Obtén más información para buscar en varias columnas.