Eseguire una ricerca di sottostringhe

Oltre alla corrispondenza completa dei token, Spanner indici di ricerca Supporta le ricerche di sottostringhe. Questa pagina descrive come eseguire una ricerca di sottostringhe nell'ambito di una ricerca full-text in Spanner.

Panoramica

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 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 ogni 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 sottostringa Corrispondenza
Bridge over Troubled Water Ridg Rub
Ponte sull'acqua inquinata ridg , roub
Ponte sull'acqua inquinata copricapo
Bridge over Troubled Water mangiato ponte
Ponte sull'acqua inquinata Ponte ponte ponte
Bridge over Troubled Water Britannico
Ponte sull'acqua inquinata bri dge
Bridge over Troubled Water troubledwater No
Ponte sull'acqua inquinata trubled No

Per una ricerca di sottostringhe, utilizza la funzione TOKENIZE_SUBSTRING nella colonna TOKENLIST come mostrato nell'esempio del DDL riportato di seguito:

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. Per esempio, la seguente query corrisponde a un album dal titolo "happy" dalla tabella creato 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. Anche le query sottostringhe utilizzano più risorse per l'esecuzione.

Ad esempio TOKENIZE_FULLTEXT, puoi configurare TOKENIZE_SUBSTRING in modo che utilizzi tipi specifici di contenuti.

Oltre alla ricerca di base di sottostringhe, 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 sottostringa. Corrispondenza
    Ponte sull'acqua inquinata attraversare
    Ponte sull'acqua inquinata Ponte ponte No
    Ponte sull'acqua inquinata brid over No
    Bridge over Troubled Water crinale su problema
    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
    Ponte sull'acqua inquinata 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 sottostringa Corrispondenza
    Ponte sull'acqua inquinata attraversare
    Bridge over Troubled Water ponte , sopra
    Ponte sull'acqua inquinata dorsale sopra No
    Bridge over Troubled Water acque agitate No
  • value_suffix: corrisponde a sottostringhe contigue e la corrispondenza deve corrispondere in la fine del valore. È concettualmente simile alla funzione ENDS_WITH per le stringhe normalizzate per maiuscole e spazi.

    Esempi

    Testo archiviato Query sottostringa. Corrispondenza
    Bridge over Troubled Water acqua instabile
    Ponte sull'acqua inquinata turbamento; acqua
    Ponte sull'acqua inquinata acqua inquinata
    Bridge over Troubled Water acque inquinate No
    Bridge over Troubled Water problemi di acqua No
    Bridge over Troubled Water un ponte 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 sottostringa Corrispondenza
    Ponte sull'acqua inquinata in caso di problemi
    Ponte sull'acqua inquinata Superato , problema
    Bridge over Troubled Water acqua inquinata No
    Ponte sull'acqua inquinata sull'acqua No
    Bridge over Troubled Water ove tormentato No
    Ponte sull'acqua inquinata ver troubled
  • word_suffix: come value_suffix, ma la stringa deve corrispondere alla fine del limite di un termine.

    Esempi

    Testo archiviato Query sottostringa Corrispondenza
    Ponte sull'acqua inquinata ver troubled
    Bridge over Troubled Water over trouble No
    Ponte sull'acqua inquinata sull'acqua No
    Bridge over Troubled Water ove tormentato No

Passaggi successivi