Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Questa pagina descrive cos'è la ricerca a testo intero e come funziona.
Una ricerca a testo intero ti consente di creare un'applicazione in grado di cercare una tabella per trovare
parole, frasi o numeri, anziché cercare solo corrispondenze esatte in
campi strutturati. Le ricerche a testo intero restituiscono i dati di cui è stato eseguito il commit più recenti e coerenti a livello transazionale alla tua applicazione. Le funzionalità di ricerca
a testo intero di Spanner includono anche la correzione ortografica,
l'automazione del rilevamento della lingua dell'input di ricerca e il ranking dei risultati di ricerca.
La chiave si espande automaticamente per includere
la corrispondenza approssimativa delle parole.
Devi creare un indice di ricerca su tutte le colonne che vuoi rendere disponibili
per le ricerche full-text. Spanner analizza i dati in queste colonne per identificare le singole parole da aggiungere all'indice di ricerca.
Spanner aggiorna l'indice di ricerca con i dati nuovi o modificati non appena
vengono salvati nel database.
Tipi di ricerca a testo intero
Ricerca di testo di base: cerca contenuti utilizzando l'intera parola o frase o parte di essa per ricevere risultati affidabili. Predicati di query di esempio:
Corrispondenza con tutte le parole [tricolor rat terrier]
Parole o frasi esatte ["rat terrier"]
Una qualunque di queste parole [miniature OR standard]
Parola in prossimità [world AROUND(3) cup]
Sottostringa [start*]
Ricerca numerica: esegue ricerche di uguaglianza e disuguaglianza numerica.
Le ricerche di uguaglianza corrispondono a un numero. Le ricerche per intervallo e disuguaglianza corrispondono
a un numero all'interno di un intervallo specifico.
Ricerca basata su n-grammi: abbina le parole con varianti ortografiche, inclusi
nomi propri. Questo tipo di ricerca consente anche di abbinare il testo della query
a nomi con errori ortografici, nomi con ortografie alternative e testo con altre
varianti ortografiche.
Ricerche Soundex: trova corrispondenze con parole dal suono simile.
Funzionalità di ricerca a testo intero
La ricerca a testo intero di Spanner offre le seguenti funzionalità:
Risultati di ricerca classificati: calcola un punteggio per valutare la corrispondenza di una query
con un documento (ad esempio, assegnando un peso maggiore a column_A). Utilizza
espressioni SQL per personalizzare la classificazione.
Snippet: evidenzia il testo corrispondente nel risultato di ricerca.
Supporto globale: supporta automaticamente la tokenizzazione in diverse lingue, inclusa la segmentazione CJK. La specifica manuale della lingua ti consente di eseguire ulteriori
ottimizzazioni.
Governance: trova ogni occorrenza di parole specifiche.
Correzione ortografica: corregge automaticamente le parole con errori ortografici nelle query
in modo che corrispondano alla parola con ortografia corretta nello spazio di archiviazione. Ad esempio, se l'utente cerca "girafe", la ricerca trova documenti con "giraffa".
Aggiunta di sinonimi contestuali, incluse le stop word: aggiunge automaticamente
sinonimi pertinenti al contesto per aumentare il richiamo. Ad esempio, "la casa"
corrisponde a "questa casa" e "foto di gatto" corrisponde a "foto di gattino".
Traduzione contestuale dei numeri da e verso il testo: associa la versione testuale di un numero alla rappresentazione numerica e viceversa. Ad esempio, "cinque gatti" corrisponde a "5 gatti".
Conversione automatica del plurale: "cat" corrisponde a "cats".
Concetti relativi alla ricerca a testo intero
La ricerca a testo intero presenta i seguenti concetti chiave:
Un documento si riferisce ai dati ricercabili in una determinata riga.
Un token si riferisce a ogni parola di un documento archiviato in un indice di ricerca.
Un processo di tokenizzazione suddivide un documento in token.
Un tokenizer è una funzione SQL utilizzata per la tokenizzazione.
Un indice invertito memorizza i token. Utilizza le query SQL per cercare
nell'indice invertito.
Esempio di caso d'uso per la ricerca full-text
Per comprendere la ricerca full-text, esaminiamo un'applicazione che
utilizza un database per archiviare i brani di ogni cantante. Ogni riga è un singolo brano. Ogni
canzone contiene colonne come titolo, testo, cantante e album. L'applicazione
utilizza la ricerca full-text per consentire a un utente di cercare un brano utilizzando query
in linguaggio naturale:
La ricerca supporta le query che utilizzano l'operatore OR, ad esempio Prince OR
Camille. Le applicazioni possono inserire direttamente l'input utente finale dalla casella di ricerca nella funzione SQL SEARCH (utilizzando la sintassi rquery). Per maggiori informazioni, consulta Eseguire una query su un indice di ricerca.
Spanner utilizza gli indici di ricerca per cercare documenti corrispondenti
in campi diversi. Ad esempio, un'applicazione può inviare una query per
cercare "cry" nel titolo, con "so cold" nel testo e "Prince" come
cantante.
Altri utilizzi degli indici di ricerca
Gli indici di ricerca hanno una serie di utilizzi oltre alla ricerca a testo intero, ad esempio:
Indicizzazione degli elementi nelle colonne dell'array. Prendi in considerazione un'applicazione che utilizza una
colonna di array per archiviare i tag associati a un elemento. Con gli indici di ricerca, l'applicazione può cercare in modo efficiente le righe contenenti un tag specifico. Per maggiori informazioni, consulta la sezione
Tokenizzazione degli array.
Trovare i dati che si trovano nell'intersezione di un insieme
di condizioni di query. Ad esempio, puoi utilizzare un insieme arbitrario di attributi
(colore, taglia, brand, valutazione e così via) per cercare un prodotto in un
catalogo.
Utilizzo di condizioni di ricerca numeriche, da sole o in combinazione con condizioni di ricerca a testo intero. Ecco alcuni esempi di casi in cui un indice di ricerca è utile per le ricerche numeriche:
Se combinato con un'applicazione full-text. Ad esempio, per trovare un'email con oggetto Foto e dimensioni superiori a 1 MB.
Quando fa parte di un'intersezione di condizioni descritte in precedenza.
Ad esempio, per trovare prodotti in cui color = "yellow" AND size = 14 AND
rating >= 4.5.
Quando cerchi l'intersezione di colonne numeriche. Ad esempio, considera una tabella che memorizza gli orari di inizio e di fine degli eventi. Gli indici di ricerca possono implementare in modo efficiente una query che cerca eventi che si sono verificati in un determinato momento: start_time <= @p AND
end_time > @p.
Per ulteriori informazioni, consulta la sezione
Indici numerici.
Passaggi per la ricerca a testo intero
In Spanner, la ricerca a testo intero richiede i seguenti passaggi:
Tokenizza un documento utilizzando le funzioni di tokenizzazione di Spanner,
ad esempio
TOKENIZE_SUBSTRING.
Per ulteriori informazioni, consulta la sezione
Tokenizzazione.
Crea un indice di ricerca per contenere i token utilizzando l'istruzione DDL CREATE SEARCH
INDEX. Per maggiori informazioni, consulta Indici di
ricerca.
Esegui query sui documenti nell'indice di ricerca utilizzando la funzione Spanner
SEARCH. Per maggiori informazioni, consulta la panoramica
delle query.
Non ci sono addebiti aggiuntivi da parte di Spanner quando utilizzi
la ricerca full-text, anche se l'implementazione della ricerca full-text
aumenta i costi a causa della necessità di risorse di calcolo e archiviazione aggiuntive.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Difficile da capire","hardToUnderstand","thumb-down"],["Informazioni o codice di esempio errati","incorrectInformationOrSampleCode","thumb-down"],["Mancano le informazioni o gli esempi di cui ho bisogno","missingTheInformationSamplesINeed","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 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)."]]