Descripción general de la búsqueda en el texto completo
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
En esta página, se describe qué es la búsqueda en el texto completo y cómo funciona.
Una búsqueda de texto completo te permite crear una aplicación que puede buscar palabras, frases o números en una tabla, en lugar de solo buscar coincidencias exactas en campos estructurados. Las búsquedas en el texto completo devuelven los datos confirmados más recientes y coherentes a nivel transaccional para tu aplicación. Las capacidades de búsqueda de texto completo de Spanner también incluyen la corrección ortográfica, la automatización de la detección de idioma de la entrada de búsqueda y la clasificación de los resultados de la búsqueda.
Spanner expande automáticamente las búsquedas de texto para incluir la coincidencia aproximada de palabras.
Debes crear un índice de búsqueda en las columnas que quieras que estén disponibles para las búsquedas de texto completo. Spanner analiza los datos de esas columnas para identificar palabras individuales que se agregarán al índice de búsqueda.
Spanner actualiza el índice de búsqueda con datos nuevos o modificados tan pronto como se confirman en la base de datos.
Tipos de búsqueda en el texto completo
Búsqueda de texto básica: Busca contenido usando toda o parte de una palabra o frase para recibir resultados confiables. Predicados de consulta de ejemplo:
Coincidencia con todas las palabras [terrier ratonero tricolor]
Palabras o frases exactas ["rat terrier"]
Cualquiera de estas palabras [miniature O standard]
Palabra cercana [copa AROUND(3) mundial]
Subcadena [start*]
Búsqueda numérica: Realiza búsquedas de igualdad y desigualdad numérica.
Las búsquedas de igualdad coinciden con un número. Las búsquedas de rango y desigualdad coinciden con un número dentro de un rango específico.
Búsqueda basada en n-gramas: Coincide con palabras que tienen variaciones ortográficas, incluidos nombres propios. Este tipo de búsqueda también ayuda a hacer coincidir el texto de la búsqueda con nombres mal escritos, nombres con ortografía alternativa y texto con otras variaciones ortográficas.
Búsquedas de Soundex: Coinciden con palabras que suenan de forma similar.
Funciones de búsqueda en el texto completo
La búsqueda en el texto completo de Spanner tiene las siguientes características:
Resultados de la búsqueda clasificados: Calcula una puntuación para medir el nivel de coincidencia entre una búsqueda y un documento (por ejemplo, asignando un peso mayor a la columna_A). Usa expresiones SQL para personalizar el ranking.
Fragmentos: Destacan el texto coincidente en el resultado de la búsqueda.
Compatibilidad global: Admite automáticamente la tokenización en diferentes idiomas, incluida la segmentación de CJK. La especificación manual del idioma te permite realizar ajustes adicionales.
Gobernanza: Encuentra cada ocurrencia de palabras específicas.
Corrección ortográfica: Corrige automáticamente las palabras mal escritas en las búsquedas para que coincidan con la palabra escrita correctamente en el almacenamiento. Por ejemplo, si el usuario busca "girafe", la búsqueda encontrará documentos con "jirafa".
Adición de sinónimos contextuales, incluidas las palabras irrelevantes: Agrega automáticamente sinónimos pertinentes según el contexto para aumentar la recuperación. Por ejemplo, "la casa" coincide con "esta casa" y "foto de gato" coincide con "foto de gatito".
Traducción contextual de números entre texto y números: Coincide 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: Coincide "gato" con "gatos".
Conceptos de la búsqueda en el texto completo
La búsqueda de texto completo tiene los siguientes conceptos clave:
Un documento hace referencia a los datos que se pueden buscar en una fila determinada.
Un token hace referencia a cada palabra de un documento que se almacena en un índice de búsqueda.
Un proceso de tokenización divide un documento en tokens.
Un tokenizador es una función de SQL que se usa para la tokenización.
Un índice invertido almacena tokens. Usar consultas de SQL para buscar en el índice invertido
Ejemplo de caso de uso para la búsqueda en el texto completo
Para comprender la búsqueda de texto completo, veamos una aplicación que usa una base de datos para almacenar canciones de cada cantante. Cada fila es una sola 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 con consultas en lenguaje natural:
La búsqueda admite consultas que usan el operador OR, como Prince OR
Camille. Las aplicaciones pueden introducir directamente la entrada del usuario final desde el cuadro de búsqueda en la función de SQL SEARCH (con la sintaxis de rquery). Para obtener más información, consulta Cómo consultar un índice de búsqueda.
Spanner usa índices de búsqueda para buscar documentos coincidentes en diferentes campos. Por ejemplo, una aplicación puede emitir una búsqueda para encontrar "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 una variedad de usos además de la búsqueda de texto completo, como los siguientes:
Indexación de elementos en columnas de array Considera una aplicación que usa una columna de array para almacenar etiquetas asociadas a un elemento. Con los índices de búsqueda, la aplicación puede buscar de manera eficiente las filas que contienen una etiqueta específica. Para obtener más información, consulta Tokenización de arrays.
Encontrar datos que se encuentran en la intersección de un conjunto de condiciones de búsqueda Por ejemplo, puedes usar un conjunto arbitrario de atributos (color, tamaño, marca, calificación, etcétera) para buscar un producto en un catálogo.
Usar condiciones de búsqueda numéricas, solas o en combinación con condiciones de texto completo Estos son algunos ejemplos de situaciones en las que un índice de búsqueda es útil para las búsquedas numéricas:
Cuando se combina con una aplicación de texto completo Por ejemplo, para encontrar un correo electrónico con el asunto Imagen y un tamaño superior a 1 MB.
Cuando forma parte de una intersección de condiciones descrita anteriormente
Por ejemplo, para encontrar productos en los que color = "yellow" AND size = 14 AND
rating >= 4.5.
Cuando se busca la intersección de columnas numéricas Por ejemplo, considera una tabla que almacena las horas de inicio y finalización de eventos. Los índices de búsqueda pueden implementar de manera eficiente una consulta que busque eventos que tuvieron lugar en un momento determinado: start_time <= @p AND
end_time > @p.
Pasos para realizar una búsqueda en el texto completo
En Spanner, la búsqueda en el texto completo 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 contener los tokens con la declaración DDL CREATE SEARCH
INDEX. Para obtener más información, consulta Índices de búsqueda.
Spanner no aplica cargos adicionales cuando usas la búsqueda en el texto completo, aunque la implementación de esta función aumenta los costos debido a la necesidad de recursos adicionales de procesamiento y almacenamiento.
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-05 (UTC)"],[],[],null,["# Full-text search overview\n\n| **Note:** This feature is available with the Spanner Enterprise edition and Enterprise Plus edition. For more information, see the [Spanner editions overview](/spanner/docs/editions-overview).\n\n\u003cbr /\u003e\n\nThis page describes what full-text search is and how it works.\n\nA full-text search lets you build an application that can search a table to find\nwords, phrases, or numbers, instead of just searching for exact matches in\nstructured fields. Full-text searches return the latest\ntransactionally-consistent committed data to your application. Spanner\nfull-text search capabilities also include making spelling corrections,\nautomating language detection of search input, and ranking search results.\nSpanner automatically expands text searches to include\napproximate word matching.\n\nYou need to create a search index on any columns that you want to make available\nfor full-text searches. Spanner analyzes the\ndata in those columns to identify individual words to add to the search index.\nSpanner updates the search index with new or modified data as soon as\nit's committed in the database.\n\nTypes of full-text search\n-------------------------\n\n- **Basic text search** : Searches for content using the entire or part of a word or phrase to reliably receive results. Example query predicates:\n - Matching all words \\[tricolor rat terrier\\]\n - Exact word or phrases \\[\"rat terrier\"\\]\n - Any of these words \\[miniature OR standard\\]\n - Word within close proximity \\[world AROUND(3) cup\\]\n - Substring \\[start\\*\\]\n- **Numeric search**: Performs numeric equality and inequality searches. Equality searches match a number. Range and inequality searches match a number within a specific range.\n- **n-gram-based search**: Matches words with spelling variations, including proper nouns and names. This type of search also helps to match query text with misspelled names, names with alternate spellings, and text with other spelling variations.\n- **Soundex searches**: Matches similar-sounding words.\n\nFull-text search features\n-------------------------\n\nSpanner full-text search has the following features:\n\n- **Ranked search results**: Computes a score to gauge how well a query matches a document (for example, giving a heavier weight for column_A). Use SQL expressions to customize ranking.\n- **Snippets**: Highlights the matching text in the search result.\n- **Global support** : Automatically supports tokenization in different languages, including [CJK](https://en.wikipedia.org/wiki/CJK_characters) segmentation. Manual specification of language lets you perform additional fine-tuning.\n- **Governance**: Finds every occurrence of specific words.\n- **Spelling correction**: Automatically corrects misspelled words in queries to match the correctly-spelled word in storage. For example, if the user searches for \"girafe\", the search finds documents with \"giraffe\".\n- **Contextual synonym addition, including stop words**: Automatically adds contextually-relevant synonyms to increase recall. For example, \"the house\" matches \"this house\" and \"cat picture\" matches \"kitty picture\".\n- **Contextual number translation to and from text**: Matches the textual version of a number to the numeric representation and vice-versa. For example, \"five cats\" matches \"5 cats\".\n- **Automatic plural conversion**: Matches \"cat\" to \"cats\".\n\nFull-text search concepts\n-------------------------\n\nFull-text search has the following key concepts:\n\n- A *document* refers to the searchable data in a given row.\n- A *token* refers to each word of a document that's stored in a search index.\n- A *tokenization* process splits a document into tokens.\n- A *tokenizer* is a SQL function used for tokenization.\n- An *inverted index* stores tokens. Use SQL queries to search the inverted index.\n\nUse case example for full-text search\n-------------------------------------\n\nTo understand full-text search, let's take a look at an application that\nuses a database to store songs for each singer. Each row is a single song. Each\nsong contains columns like title, lyrics, singer, and album. The application\nuses full-text search to let a user search for a song using natural language\nqueries:\n\n- The search supports queries that use the `OR` operator, like `Prince OR\n Camille`. Applications can directly feed the end user input from the search box into the SQL [`SEARCH`](/spanner/docs/full-text-search/query-overview#query_a_search_index) function (using the rquery syntax). For more information, see [Query a\n search\n index](/spanner/docs/full-text-search/query-overview#query_a_search_index).\n- Spanner uses search indexes to look for matching documents across different fields. For example, an application can issue a query to search for \"cry\" in the title, with \"so cold\" in the lyrics, and \"Prince\" as the singer.\n\nOther uses for search indexes\n-----------------------------\n\nSearch indexes have a variety of uses in addition to full-text search, such as\nthe following:\n\n- Indexing elements in array columns. Consider an application that uses an\n array column to store tags associated with an item. With search indexes, the\n application can efficiently look up rows containing a specific tag. For more\n information, see\n [Array tokenization](/spanner/docs/full-text-search/numeric-indexes#array-tokenization).\n\n \u003cbr /\u003e\n\n- Finding data that resides in the intersection of a set\n of query conditions. For example, you can use an arbitrary set of attributes\n (color, size, brand, rating, and so on) to search for a product in a\n catalog.\n\n- Using numeric search conditions, alone or in combination with full-text\n conditions. Some examples for when a search index is useful for numeric\n searches:\n\n - When it's combined with a full-text application. For example, to find an email with the subject **Picture** and size greater than 1 MB.\n - When it's part of an intersection of conditions described previously. For example, to find products where `color = \"yellow\" AND size = 14 AND\n rating \u003e= 4.5`.\n - When searching for the intersection of numeric columns. For example, consider a table storing event start and end times. Search indexes can efficiently implement a query that looks for events that took place at a particular point in time: `start_time \u003c= @p AND\n end_time \u003e @p`.\n\n For more information, see\n [Numeric indexes](/spanner/docs/full-text-search/numeric-indexes).\n\nFull-text search steps\n----------------------\n\nIn Spanner, full-text search requires the following steps:\n\n1. Tokenize a document using the Spanner tokenizer functions, such as [`TOKENIZE_SUBSTRING`](/spanner/docs/reference/standard-sql/search_functions#tokenize_substring). For more information, see [Tokenization](/spanner/docs/full-text-search/tokenization).\n2. Create a search index to hold the tokens using the [`CREATE SEARCH\n INDEX`](/spanner/docs/reference/standard-sql/data-definition-language#create-search-index) DDL statement. For more information, see [Search\n indexes](/spanner/docs/full-text-search/search-indexes).\n3. Query documents in the search index using the Spanner [`SEARCH`](/spanner/docs/reference/standard-sql/search_functions#search_fulltext) function. For more information, see [Query\n overview](/spanner/docs/full-text-search/query-overview).\n4. Rank the results of the query using the Spanner [`SCORE`](/spanner/docs/reference/standard-sql/search_functions#score) function. For more information, see [Rank search\n results](/spanner/docs/full-text-search/ranked-search).\n\nLimitations\n-----------\n\n- Full-text search doesn't support [Assured Workloads](/assured-workloads/docs/overview).\n\nPricing\n-------\n\nThere are no additional charges from Spanner when you use\nfull-text search, although the implementation of full-text search\nincreases costs due to the need for additional compute and storage resources.\n\nFor more information, see [Spanner pricing](/spanner/pricing).\n\nWhat's next\n-----------\n\n- Learn about [tokenization and Spanner tokenizers](/spanner/docs/full-text-search/tokenization).\n- Learn about [search indexes](/spanner/docs/full-text-search/search-indexes).\n- Learn about [full-text search queries](/spanner/docs/full-text-search/query-overview)."]]