Realiza una búsqueda de subcadenas

Además de la coincidencia de tokens completos, Spanner índices de búsqueda admiten búsquedas de subcadenas. En esta página, se describe cómo ejecutar una subcadena como parte de una búsqueda de texto completo en Spanner

Descripción general

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.
  • Sin segmentación para chino, japonés ni coreano (CJK), ya que se realizaron consultas parciales en CJK suelen segmentarse de forma incorrecta.
  • Si hay varios términos de búsqueda, el resultado debe contener una subcadena de cada uno tiempo. Por ejemplo, 'happ momen' coincide con "happy moment" porque ambos las subcadenas correspondientes en el texto. No coincide con "happy day".

Ejemplos

Texto almacenado Consulta de subcadenas Coincidencia
Puente sobre aguas con problemas ridg roub
Puente sobre aguas con problemas ridg , roub
Puente sobre aguas con problemas sobre novia
Puente sobre aguas con problemas puente de ate
Puente sobre aguas con problemas Puente puente puente
Puente sobre aguas con problemas bri trou ter
Puente sobre aguas con problemas bri dge
Puente sobre aguas con problemas aguas turbulentas No
Puente sobre aguas con problemas dudoso No

Para una búsqueda de subcadenas, usa la función TOKENIZE_SUBSTRING en TOKENLIST. definición de columna, como se muestra en el siguiente ejemplo de DDL:

CREATE TABLE Albums (
  AlbumId STRING(MAX) NOT NULL,
  AlbumTitle STRING(MAX),
  AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_SUBSTRING(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);

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:

SELECT Album
FROM Albums
WHERE SEARCH_SUBSTRING(AlbumTitle_Tokens, 'happ');

TOKENIZE_SUBSTRING genera n-grams. para cada token y almacena estos n-gramas en el índice de búsqueda. El mínimo la longitud máxima de los n-gramas que se generarán se configuran mediante argumentos opcionales.

Los índices de búsqueda de subcadena pueden usar entre 10 y 30 veces más almacenamiento que los índices de texto completo en 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 usar tipos específicos de contenido.

Además de la búsqueda de subcadena básica, SEARCH_SUBSTRING admite el modo de búsqueda relativa. Una búsqueda relativa define mejor la búsqueda por subcadena resultados.

Para habilitar el modo de búsqueda relativa, establece el TOKENIZE_SUBSTRING relative_search_types como TRUE.

Cuando la búsqueda relativa está habilitada en la tokenización, SEARCH_SUBSTRING puede realizar consultas con los siguientes tipos de búsqueda relativa:

  • value_prefix: Coincide con substrings contiguas y la coincidencia debe comenzar al principio del valor. Es conceptualmente similar al Función STARTS_WITH para las cadenas normalizadas de mayúsculas y espacios en blanco.

    Ejemplos

    Texto almacenado Consulta de subcadenas Coincidencia
    Puente sobre aguas con problemas puente sobre
    Puente sobre aguas con problemas puente , sobre
    Puente sobre aguas con problemas cresta sobre No
    Puente sobre aguas con problemas agua problemática No
  • value_suffix: Coincide con subcadenas contiguas y debe coincidir en el final del valor. Es conceptualmente similar a ENDS_WITH. para cadenas normalizadas de mayúsculas y espacios en blanco.

    Ejemplos

    Texto almacenado Consulta de subcadenas. Coincidencia
    Puente sobre aguas turbulentas agua problemática
    Puente sobre aguas con problemas agua turbia
    Puente sobre aguas con problemas agua con óxido
    Puente sobre aguas con problemas wate con problemas No
    Puente sobre aguas con problemas problemas de agua No
    Puente sobre aguas con problemas puente sobre No
  • word_prefix: como value_prefix, pero la cadena debe coincidir con un término límite (en lugar de un límite de valor).

    Ejemplos

    Texto almacenado Consulta de subcadenas Coincidencia
    Puente sobre aguas turbulentas más de problemas
    Puente sobre aguas con problemas Más de , problemas
    Puente sobre aguas con problemas problemas de agua No
    Puente sobre aguas con problemas sobre el agua No
    Puente sobre aguas turbulentas con problemas No
    Puente sobre aguas con problemas ver con problemas
  • word_suffix: Es similar a value_suffix, pero la cadena debe coincidir al final de un límite de término.

    Ejemplos

    Texto almacenado Consulta de subcadenas Coincidencia
    Puente sobre aguas con problemas ver con problemas
    Puente sobre aguas con problemas más de problemas No
    Puente sobre aguas con problemas sobre el agua No
    Puente sobre aguas turbulentas con problemas No

¿Qué sigue?