Oltre alla corrispondenza esatta dei token, gli indici di ricerca di Spanner supportano le ricerche di sottostringhe. Questa pagina descrive come eseguire una ricerca di sottostringhe nell'ambito di una ricerca full-text in Spanner.
Le ricerche di sottostringhe hanno le seguenti caratteristiche:
- Non fa distinzione tra maiuscole e minuscole, ignora la maggior parte della punteggiatura e normalizza gli spazi vuoti.
- Nessuna segmentazione cinese, giapponese e coreana (CJK), poiché le query CJK parziali vengono spesso segmentate in modo errato.
- Per più termini di ricerca, il risultato deve contenere una sottostringa di ciascun
termine. Ad esempio,
'happ momen'corrisponde a"happy moment", perché entrambe le sottostringhe si trovano nel testo. Non corrisponde a"happy day".
Esempi
| Testo memorizzato | Query di sottostringa | Corrispondenza |
|---|---|---|
| Bridge over Troubled Water | ridg roub | Sì |
| Bridge over Troubled Water | ridg , roub | Sì |
| Bridge over Troubled Water | over brid | Sì |
| Bridge over Troubled Water | ponte ate | Sì |
| Bridge over Troubled Water | Ponte ponte ponte | Sì |
| Bridge over Troubled Water | bri trou ter | Sì |
| Bridge over Troubled Water | bri dge | Sì |
| Bridge over Troubled Water | troubledwater | No |
| Bridge over Troubled Water | trubled | No |
Per una ricerca di sottostringhe, utilizza la funzione TOKENIZE_SUBSTRING nella definizione della colonna TOKENLIST, come mostrato nel seguente esempio di DDL:
GoogleSQL
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
AlbumTitle STRING(MAX),
AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_SUBSTRING(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsTitleIndex ON Albums(AlbumTitle_Tokens);
PostgreSQL
Questo esempio utilizza
spanner.tokenize_substring.
CREATE TABLE albums (
albumid character varying NOT NULL,
albumtitle character varying,
albumtitle_tokens spanner.tokenlist
GENERATED ALWAYS AS (spanner.tokenize_substring(albumtitle)) VIRTUAL HIDDEN,
PRIMARY KEY(albumid));
CREATE SEARCH INDEX albumstitleindex ON albums(albumtitle_tokens);
Nella query SQL, utilizza la funzione SEARCH_SUBSTRING nella clausola WHERE. Ad esempio, la seguente query corrisponde a un album con il titolo "happy" della tabella creata nell'esempio precedente:
GoogleSQL
SELECT AlbumId
FROM Albums
WHERE SEARCH_SUBSTRING(AlbumTitle_Tokens, 'happ');
PostgreSQL
Questo esempio utilizza
spanner.search_substring.
SELECT albumid
FROM albums
WHERE spanner.search_substring(albumtitle_tokens, 'happ');
TOKENIZE_SUBSTRING genera n-grammi
per ogni token e li memorizza nell'indice di ricerca. La lunghezza minima e
massima degli n-grammi da generare viene configurata tramite argomenti facoltativi.
Gli indici di ricerca di sottostringhe possono utilizzare uno spazio di archiviazione 10-30 volte superiore rispetto agli indici full-text sugli stessi dati, perché la tokenizzazione produce molti più token. Ciò è
particolarmente vero se la differenza tra ngram_size_min e
ngram_size_max aumenta. Anche le query di sottostringa utilizzano più risorse per l'esecuzione.
Come TOKENIZE_FULLTEXT,
puoi configurare TOKENIZE_SUBSTRING per utilizzare tipi specifici di contenuti.
Abilitare una ricerca di sottostringa relativa
Oltre alla ricerca di sottostringhe di base,
SEARCH_SUBSTRING
supporta la modalità di ricerca relativa. Una ricerca relativa perfeziona i risultati della ricerca di sottostringhe.
Per attivare la modalità di ricerca relativa, imposta il parametro relative_search_types di
TOKENIZE_SUBSTRING
su un array non vuoto con elementi dei tipi di ricerca relativa supportati.
Quando la ricerca relativa è attivata nella tokenizzazione, SEARCH_SUBSTRING può eseguire
query con i seguenti tipi di ricerca relativa:
phrase: corrisponde a sottostringhe contigueEsempi
Testo memorizzato Query di sottostringa. Corrispondenza Bridge over Troubled Water bridge over Sì Bridge over Troubled Water Ponte ponte ponte No Bridge over Troubled Water brid over No Bridge over Troubled Water dorsale sopra il problema Sì Bridge over Troubled Water bridge ove troubled No Bridge over Troubled Water idge ove Sì Bridge over Troubled Water idge , ove Sì Bridge over Troubled Water RIDGE OVE Sì Bridge over Troubled Water acqua del ponte No value_prefix: corrisponde alle sottostringhe contigue e la corrispondenza deve iniziare all'inizio del valore. Questo è concettualmente simile alla funzioneSTARTS_WITHper le stringhe normalizzate per maiuscole/minuscole e spazi bianchi.Esempi
Testo memorizzato Query di sottostringa Corrispondenza Bridge over Troubled Water bridge over Sì Bridge over Troubled Water ponte , sopra Sì Bridge over Troubled Water dorsale No Bridge over Troubled Water acque agitate No value_suffix: corrisponde alle sottostringhe contigue e la corrispondenza deve avvenire alla fine del valore. Questo è concettualmente simile alla funzioneENDS_WITHper le stringhe normalizzate per maiuscole/minuscole e spazi bianchi.Esempi
Testo memorizzato Query di sottostringa. Corrispondenza Bridge over Troubled Water acque agitate Sì Bridge over Troubled Water acqua ; torbida Sì Bridge over Troubled Water acqua torbida Sì Bridge over Troubled Water troubled wate No Bridge over Troubled Water acqua torbida No Bridge over Troubled Water bridge over No word_prefix:comevalue_prefix, ma la stringa deve corrispondere a un limite di termine (anziché a un limite di valore).Esempi
Testo memorizzato Query di sottostringa Corrispondenza Bridge over Troubled Water over trouble Sì Bridge over Troubled Water Oltre , problemi Sì Bridge over Troubled Water acqua torbida No Bridge over Troubled Water sopra l'acqua No Bridge over Troubled Water ove troubled No Bridge over Troubled Water ver troubled Sì word_suffix: comevalue_suffix, ma la stringa deve corrispondere alla fine di un limite del termine.Esempi
Testo memorizzato Query di sottostringa Corrispondenza Bridge over Troubled Water ver troubled Sì Bridge over Troubled Water over trouble No Bridge over Troubled Water sopra l'acqua No Bridge over Troubled Water ove troubled No
Passaggi successivi
- Scopri di più sulle query di ricerca full-text.
- Scopri come classificare i risultati di ricerca.
- Scopri come impaginare i risultati di ricerca.
- Scopri come combinare query di testo e non di testo.
- Scopri come cercare in più colonne.