Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Esta página descreve o que é a pesquisa de texto completo e como ela funciona.
Com uma pesquisa de texto completo, você cria um aplicativo que pode pesquisar uma tabela para encontrar palavras, frases ou números, em vez de apenas correspondências exatas em campos estruturados. As pesquisas de texto completo retornam os dados confirmados mais recentes e consistentes do ponto de vista transacional para seu aplicativo. Os recursos de pesquisa de texto completo do Spanner também incluem correção ortográfica, automação da detecção de idioma da entrada de pesquisa e classificação dos resultados da pesquisa.
O Spanner expande automaticamente as pesquisas de texto para incluir a correspondência aproximada de palavras.
É necessário criar um índice de pesquisa em todas as colunas que você quer disponibilizar para pesquisas de texto completo. O Spanner analisa os dados nessas colunas para identificar palavras individuais e adicioná-las ao índice de pesquisa.
O Spanner atualiza o índice de pesquisa com dados novos ou modificados assim que eles são confirmados no banco de dados.
Tipos de pesquisa de texto completo
Pesquisa de texto básica: pesquisa conteúdo usando toda ou parte de uma palavra ou frase para receber resultados confiáveis. Exemplos de predicados de consulta:
Corresponde a todas as palavras [rat terrier tricolor]
Palavras ou frases exatas ["rat terrier"]
Qualquer uma destas palavras [miniature OR standard]
Palavra em proximidade [copa DO(3) mundo]
Substring [start*]
Pesquisa numérica: realiza pesquisas de igualdade e desigualdade numérica.
As pesquisas de igualdade correspondem a um número. As pesquisas de intervalo e desigualdade correspondem a um número dentro de um intervalo específico.
Pesquisa baseada em n-gramas: corresponde a palavras com variações ortográficas, incluindo substantivos próprios e nomes. Esse tipo de pesquisa também ajuda a corresponder o texto da consulta
com nomes escritos incorretamente, nomes com grafias alternativas e texto com outras
variações ortográficas.
Pesquisas Soundex: correspondem a palavras com sons semelhantes.
Recursos de pesquisa de texto completo
A pesquisa de texto completo do Spanner tem os seguintes recursos:
Resultados da pesquisa classificados: calcula uma pontuação para avaliar a correspondência entre uma consulta e um documento (por exemplo, atribuindo um peso maior a "column_A"). Use expressões SQL para personalizar a classificação.
Snippets: destaca o texto correspondente no resultado da pesquisa.
Suporte global: oferece suporte automático à tokenização em diferentes idiomas, incluindo a segmentação CJK. A especificação manual do idioma permite fazer ajustes mais precisos.
Governança: encontra todas as ocorrências de palavras específicas.
Correção ortográfica: corrige automaticamente palavras com erros ortográficos em consultas
para corresponder à palavra com ortografia correta no armazenamento. Por exemplo, se o usuário pesquisar "girafe", a pesquisa vai encontrar documentos com "giraffe".
Adição de sinônimos contextuais, incluindo palavras de parada: adiciona automaticamente sinônimos contextualmente relevantes para aumentar o recall. Por exemplo, "a casa" corresponde a "esta casa" e "foto de gato" corresponde a "foto de gatinho".
Tradução contextual de números para texto e vice-versa: corresponde à versão textual de um número à representação numérica e vice-versa. Por
exemplo, "cinco gatos" corresponde a "5 gatos".
Conversão automática para o plural: corresponde a "gato" e "gatos".
Conceitos da pesquisa de texto completo
A pesquisa de texto completo tem os seguintes conceitos principais:
Um documento se refere aos dados pesquisáveis em uma determinada linha.
Um token se refere a cada palavra de um documento armazenado em um índice de pesquisa.
Um processo de tokenização divide um documento em tokens.
Um tokenizador é uma função SQL usada para tokenização.
Um índice invertido armazena tokens. Use consultas SQL para pesquisar o índice invertido.
Exemplo de caso de uso da pesquisa de texto completo
Para entender a pesquisa de texto completo, vamos analisar um aplicativo que usa um banco de dados para armazenar músicas de cada cantor. Cada linha é uma música. Cada música tem colunas como título, letra, artista e álbum. O aplicativo
usa a pesquisa de texto completo para permitir que um usuário procure uma música usando consultas
em linguagem natural:
A pesquisa é compatível com consultas que usam o operador OR, como Prince OR
Camille. Os aplicativos podem inserir diretamente a entrada do usuário final da caixa de pesquisa na função SQL
SEARCH (usando a sintaxe rquery). Para mais informações, consulte Consultar um
índice
de pesquisa.
O Spanner usa índices de pesquisa para procurar documentos correspondentes em diferentes campos. Por exemplo, um aplicativo pode emitir uma consulta para
pesquisar "cry" no título, com "so cold" na letra e "Prince" como
o cantor.
Outros usos para índices de pesquisa
Os índices de pesquisa têm vários usos além da pesquisa de texto completo, como os seguintes:
Indexação de elementos em colunas de matriz. Considere um aplicativo que usa uma coluna de matriz para armazenar tags associadas a um item. Com os índices de pesquisa, o
aplicativo pode pesquisar com eficiência linhas que contêm uma tag específica. Para mais
informações, consulte
Tokenização de matriz.
Encontrar dados que estão na interseção de um conjunto de condições de consulta. Por exemplo, é possível usar um conjunto arbitrário de atributos (cor, tamanho, marca, classificação etc.) para pesquisar um produto em um catálogo.
Usar condições de pesquisa numérica, sozinhas ou em combinação com condições de texto completo. Alguns exemplos de quando um índice de pesquisa é útil para pesquisas numéricas:
Quando combinado com um aplicativo de texto completo. Por exemplo, para encontrar um e-mail com o assunto Imagem e tamanho maior que 1 MB.
Quando faz parte de uma interseção de condições descritas anteriormente.
Por exemplo, para encontrar produtos em que color = "yellow" AND size = 14 AND
rating >= 4.5.
Ao pesquisar a interseção de colunas numéricas. Por exemplo, considere uma tabela que armazena horários de início e término de eventos. Os índices de pesquisa podem implementar com eficiência uma consulta que procura eventos que ocorreram em um determinado momento: start_time <= @p AND
end_time > @p.
A pesquisa de texto completo não é compatível com o Assured Workloads.
Preços
Não há cobranças extras do Spanner ao usar a pesquisa de texto completo, mas a implementação dela aumenta os custos devido à necessidade de mais recursos de computação e armazenamento.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-08-11 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)."]]