Realiza una búsqueda de substring

Además de la coincidencia 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 subcadena como parte de una búsqueda de texto completo en Spanner.

Las búsquedas de subcadena tienen las siguientes características:

  • No distingue mayúsculas de minúsculas, descarta la mayoría de la puntuación y normaliza los espacios en blanco.
  • No hay segmentación de chino, japonés ni coreano (CJK), ya que las búsquedas parciales de CJK a menudo se segmentan 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", ya que 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
Bridge over Troubled Water ridg , roub
Bridge over Troubled Water sobre brid
Bridge over Troubled Water puente de ate
Bridge over Troubled Water Puente puente puente
Bridge over Troubled Water bri trou ter
Bridge over Troubled Water bri dge
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:

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 “feliz” de la tabla creada en el ejemplo anterior:

SELECT Album
FROM Albums
WHERE 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 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 subcadena 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 los resultados de la búsqueda de substring.

Para habilitar el modo de búsqueda relativa, establece el parámetro TOKENIZE_SUBSTRING relative_search_types en VERDADERO.

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 substrings contiguas.

    Ejemplos

    Texto almacenado Consulta de subcadena. Coincidencia
    Bridge over Troubled Water puente sobre
    Bridge over Troubled Water Puente puente puente No
    Bridge over Troubled Water puente No
    Bridge over Troubled Water cresta sobre problemas
    Bridge over Troubled Water puente sobre aguas turbulentas No
    Bridge over Troubled Water idge ove
    Bridge over Troubled Water idge , ove
    Bridge over Troubled Water RIDGE OVE
    Bridge over Troubled Water agua de puente No
  • value_prefix: Coincide con substrings contiguas y la coincidencia debe comenzar al principio del valor. Esto es conceptualmente similar a la función STARTS_WITH para cadenas normalizadas de mayúsculas y espacios en blanco.

    Ejemplos

    Texto almacenado Consulta de subcadena Coincidencia
    Bridge over Troubled Water puente sobre
    Bridge over Troubled Water puente , sobre
    Bridge over Troubled Water cresta No
    Bridge over Troubled Water aguas turbulentas No
  • value_suffix: Coincide con substrings contiguas y la coincidencia debe coincidir al final del valor. Esto es conceptualmente similar a la función ENDS_WITH para cadenas normalizadas de mayúsculas y espacios en blanco.

    Ejemplos

    Texto almacenado Consulta de subcadena. Coincidencia
    Bridge over Troubled Water aguas turbulentas
    Bridge over Troubled Water agua turbia
    Bridge over Troubled Water agua con óxido
    Bridge over Troubled Water agua turbia No
    Bridge over Troubled Water agua con problemas No
    Bridge over Troubled Water puente sobre No
  • word_prefix: es como value_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
    Bridge over Troubled Water Más de , problemas
    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 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 subcadena Coincidencia
    Bridge over Troubled Water ver problemas
    Bridge over Troubled Water sobre problemas No
    Bridge over Troubled Water sobre el agua No
    Bridge over Troubled Water con problemas No

¿Qué sigue?