Eseguire una ricerca di sottostringhe

Oltre alla corrispondenza completa 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 a testo intero 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.
  • Nessuna segmentazione in cinese, giapponese e coreano (CJK), poiché le query CJK parziali spesso vengono 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 sono presenti nel testo. Non corrisponde a "happy day".

Esempi

Testo archiviato Query sulla sottostringa Corrispondenza
Bridge over Troubled Water ridg roub
Bridge over Troubled Water ridg , roub
Bridge over Troubled Water over brid
Bridge over Troubled Water ponte di ate
Bridge over Troubled Water Ponte ponte ponte
Bridge over Troubled Water bri trou ter
Bridge over Troubled Water bri dge
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 nell'esempio DDL seguente:

CREATE TABLE Albums (
  AlbumId STRING(MAX) NOT NULL,
  AlbumTitle STRING(MAX),
  AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_SUBSTRING(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);

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:

SELECT Album
FROM Albums
WHERE 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-gram da generare sono configurate tramite argomenti facoltativi.

Gli indici di ricerca delle sottostringhe possono utilizzare fino a 10-30 volte più spazio di archiviazione rispetto agli indici di testo completo per gli stessi dati, perché la tokenizzazione produce molti più token. Ciò è particolarmente vero se la differenza tra ngram_size_min e ngram_size_max aumenta. Inoltre, le query sulla sottostringa richiedono più risorse per l'esecuzione.

Come TOKENIZE_FULLTEXT, puoi configurare TOKENIZE_SUBSTRING per utilizzare tipi specifici di contenuti.

Oltre alla ricerca di sottostringhe di base, SEARCH_SUBSTRING supporta la modalità di ricerca relativa. Una ricerca relativa perfeziona i risultati di ricerca per sottostringa.

Per attivare la modalità di ricerca relativa, imposta il parametro TOKENIZE_SUBSTRING relative_search_types su TRUE.

Quando la ricerca relativa è attivata nella tokenizzazione, SEARCH_SUBSTRING può eseguire query con i seguenti tipi di ricerca relativa:

  • phrase: corrisponde a sottostringhe contigue

    Esempi

    Testo archiviato Query sulla sottostringa. Corrispondenza
    Bridge over Troubled Water attraversare
    Bridge over Troubled Water Ponte ponte ponte No
    Bridge over Troubled Water brid over No
    Bridge over Troubled Water superare i problemi
    Bridge over Troubled Water ponte ove travagliato No
    Bridge over Troubled Water idge ove
    Bridge over Troubled Water idge , ove
    Bridge over Troubled Water RIDGE OVE
    Bridge over Troubled Water acqua del ponte No
  • value_prefix: corrisponde a sottostringhe contigue e la corrispondenza deve iniziare all'inizio del valore. È concettualmente simile alla funzione STARTS_WITH per le stringhe normalizzate per maiuscole e spazi.

    Esempi

    Testo archiviato Query sulla sottostringa Corrispondenza
    Bridge over Troubled Water attraversare
    Bridge over Troubled Water ponte , sopra
    Bridge over Troubled Water superare No
    Bridge over Troubled Water acque agitate No
  • value_suffix: corrisponde a sottostringhe contigue e la corrispondenza deve trovarsi alla fine del valore. È concettualmente simile alla funzione ENDS_WITH per le stringhe normalizzate per maiuscole e spazi.

    Esempi

    Testo archiviato Query sulla sottostringa. Corrispondenza
    Bridge over Troubled Water acque agitate
    Bridge over Troubled Water acqua ; agitata
    Bridge over Troubled Water acqua inquinata
    Bridge over Troubled Water acque inquinate No
    Bridge over Troubled Water acqua inquinata No
    Bridge over Troubled Water attraversare No
  • word_prefix: come value_prefix, ma la stringa deve corrispondere a un confine di termine (anziché a un confine di valore).

    Esempi

    Testo archiviato Query sulla sottostringa Corrispondenza
    Bridge over Troubled Water over trouble
    Bridge over Troubled Water Over , trouble
    Bridge over Troubled Water acqua inquinata No
    Bridge over Troubled Water sull'acqua No
    Bridge over Troubled Water ove in difficoltà No
    Bridge over Troubled Water ver troubled
  • word_suffix: come value_suffix, ma la stringa deve corrispondere alla fine di un confine del termine.

    Esempi

    Testo archiviato Query sulla sottostringa Corrispondenza
    Bridge over Troubled Water ver troubled
    Bridge over Troubled Water over trouble No
    Bridge over Troubled Water sull'acqua No
    Bridge over Troubled Water ove in difficoltà No

Passaggi successivi