En esta página se describe qué es la búsqueda de texto completo y cómo funciona.
La búsqueda de texto completo te permite crear una aplicación que pueda buscar palabras, frases o números en una tabla, en lugar de buscar solo coincidencias exactas en campos estructurados. Las búsquedas de texto completo devuelven a tu aplicación los datos confirmados más recientes que sean coherentes desde el punto de vista transaccional. Las funciones de búsqueda de texto completo de Spanner también incluyen la corrección ortográfica, la automatización de la detección del idioma de la entrada de búsqueda y la clasificación de los resultados de búsqueda. Spanner amplía automáticamente las búsquedas de texto para incluir coincidencias aproximadas de palabras.
Debe crear un índice de búsqueda en las columnas que quiera que estén disponibles para las búsquedas de texto completo. Spanner analiza los datos de esas columnas para identificar palabras concretas que añadir al índice de búsqueda. Spanner actualiza el índice de búsqueda con los datos nuevos o modificados en cuanto se confirman en la base de datos.
Tipos de búsqueda en todo el texto
- Búsqueda de texto básica: busca contenido usando toda o parte de una palabra o frase para obtener resultados fiables. Ejemplos de predicados de consulta:
- Coincidencia con todas las palabras [tricolor rat terrier]
- Palabras o frases exactas ["rat terrier"]
- Cualquiera de estas palabras [miniature OR standard]
- Palabra que se encuentra cerca [world AROUND(3) cup]
- Subcadena [inicio*]
- Búsqueda numérica: realiza búsquedas de igualdad y desigualdad numéricas. Las búsquedas de igualdad coinciden con un número. Las búsquedas por intervalo y desigualdad coinciden con un número dentro de un intervalo específico.
- Búsqueda basada en n-gramas: busca palabras con variaciones ortográficas, incluidos nombres propios. Este tipo de búsqueda también ayuda a que el texto de la consulta coincida con nombres que tengan errores ortográficos, nombres con grafías alternativas y texto con otras variaciones ortográficas.
- Búsquedas de Soundex: busca palabras que suenen de forma similar.
Funciones de búsqueda en todo el texto
La búsqueda en todo el texto de Spanner tiene las siguientes características:
- Resultados de búsqueda clasificados: calcula una puntuación para medir el grado de coincidencia de una consulta con un documento (por ejemplo, asignando una ponderación mayor a la columna A). Usa expresiones SQL para personalizar la clasificación.
- Fragmentos: destaca el texto que coincide en el resultado de búsqueda.
- Compatibilidad global: admite automáticamente la tokenización en diferentes idiomas, incluida la segmentación CJK. Si especificas el idioma manualmente, puedes hacer ajustes adicionales.
- Gobernanza: busca todas las apariciones de palabras específicas.
- Corrección ortográfica: corrige automáticamente las palabras mal escritas en las consultas para que coincidan con la palabra que tiene la ortografía correcta en el almacenamiento. Por ejemplo, si el usuario busca "girafe", la búsqueda encontrará documentos con "giraffe".
- Adición de sinónimos contextuales, incluidas las palabras vacías: añade automáticamente sinónimos relevantes en el contexto para aumentar la cobertura. Por ejemplo, "la casa" coincide con "esta casa" y "foto de gato" coincide con "foto de gatito".
- Traducción contextual de números a texto y viceversa: relaciona la versión textual de un número con su representación numérica y viceversa. Por ejemplo, "cinco gatos" coincide con "5 gatos".
- Conversión automática de plurales: hace coincidir "cat" con "cats".
Conceptos de búsqueda en todo el texto
La búsqueda en todo el texto tiene los siguientes conceptos clave:
- Un documento hace referencia a los datos por los que se puede buscar en una fila determinada.
- Un token es cada palabra de un documento almacenado en un índice de búsqueda.
- Un proceso de tokenización divide un documento en tokens.
- Un tokenizador es una función SQL que se usa para la tokenización.
- Un índice invertido almacena tokens. Usa consultas SQL para buscar en el índice invertido.
Ejemplo de caso práctico de búsqueda en todo el texto
Para entender la búsqueda de texto completo, vamos a ver una aplicación que usa una base de datos para almacenar canciones de cada cantante. Cada fila es una canción. Cada canción contiene columnas como título, letra, cantante y álbum. La aplicación usa la búsqueda de texto completo para permitir que un usuario busque una canción mediante consultas en lenguaje natural:
- La búsqueda admite consultas que usan el operador
OR
, comoPrince OR Camille
. Las aplicaciones pueden introducir directamente la entrada del usuario final del cuadro de búsqueda en la función SQLSEARCH
(con la sintaxis rquery). Para obtener más información, consulta Consultar un índice de búsqueda. - Spanner usa índices de búsqueda para buscar documentos que coincidan en diferentes campos. Por ejemplo, una aplicación puede enviar una consulta para buscar "cry" en el título, con "so cold" en la letra y "Prince" como cantante.
Otros usos de los índices de búsqueda
Los índices de búsqueda tienen varios usos además de la búsqueda de texto completo, como los siguientes:
Indexación de elementos en columnas de matriz. Supongamos que hay una aplicación que usa una columna de matriz para almacenar etiquetas asociadas a un elemento. Con los índices de búsqueda, la aplicación puede buscar de forma eficiente las filas que contengan una etiqueta específica. Para obtener más información, consulta Tokenización de arrays.
Buscar datos que se encuentren en la intersección de un conjunto de condiciones de consulta. Por ejemplo, puede usar un conjunto arbitrario de atributos (color, talla, marca, valoración, etc.) para buscar un producto en un catálogo.
Usar condiciones de búsqueda numéricas, solas o combinadas con condiciones de texto completo. A continuación se muestran algunos ejemplos de situaciones en las que un índice de búsqueda es útil para búsquedas numéricas:
- Cuando se combina con una aplicación de texto completo. Por ejemplo, para buscar un correo con el asunto Imagen y un tamaño superior a 1 MB.
- Cuando forma parte de una intersección de condiciones descritas anteriormente.
Por ejemplo, para encontrar productos en los que
color = "yellow" AND size = 14 AND rating >= 4.5
. - Al buscar la intersección de columnas numéricas. Por ejemplo, imagina una tabla que almacena las horas de inicio y finalización de los eventos. Los índices de búsqueda pueden implementar de forma eficiente una consulta que busque eventos que hayan tenido lugar en un momento concreto:
start_time <= @p AND end_time > @p
.
Para obtener más información, consulta Índices numéricos.
Pasos para realizar una búsqueda en todo el texto
En Spanner, la búsqueda en todo el texto requiere los siguientes pasos:
- Tokeniza un documento con las funciones de tokenización de Spanner, como
TOKENIZE_SUBSTRING
. Para obtener más información, consulta Tokenización. - Crea un índice de búsqueda para almacenar los tokens con la instrucción DDL
CREATE SEARCH INDEX
. Para obtener más información, consulta Índices de búsqueda. - Consulta documentos en el índice de búsqueda con la función
SEARCH
de Spanner. Para obtener más información, consulta el resumen de las consultas. - Clasifica los resultados de la consulta con la función de Spanner
SCORE
. Para obtener más información, consulta el artículo Clasificar resultados de búsqueda.
Limitaciones
- La búsqueda en todo el texto no es compatible con Assured Workloads.
Precios
Spanner no aplica cargos adicionales cuando usas la búsqueda de texto completo, aunque la implementación de esta función aumenta los costes debido a la necesidad de recursos de computación y almacenamiento adicionales.
Para obtener más información, consulta la página de precios de Spanner.
Siguientes pasos
- Consulta información sobre la tokenización y los tokenizadores de Spanner.
- Consulta información sobre los índices de búsqueda.
- Consulta información sobre las consultas de búsqueda de texto completo.