Esegui una ricerca di sottostringhe

Oltre alla corrispondenza completa dei token, Spanner indici di ricerca Supporta le ricerche di sottostringhe. In questa pagina viene descritto come eseguire una sottostringa nell'ambito di una ricerca a testo intero 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), a causa delle query CJK parziali spesso segmentano 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é entrambi trovate nel testo. Non corrisponde a "happy day".

Esempi

Testo archiviato Query sulla sottostringa Corrispondenza
Ponte sull'acqua inquinata Ridg Rub
Ponte sull'acqua inquinata ridg , roub
Bridge over Troubled Water copricapo
Ponte sull'acqua inquinata mangiato ponte
Bridge over Troubled Water Ponte ponte
Ponte sull'acqua inquinata Britannico
Bridge over Troubled Water bri dge
Ponte sull'acqua inquinata acqua turbolenta No
Ponte sull'acqua inquinata trublato 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-grams per ogni token e archivia questi n-grammi nell'indice di ricerca. Le metriche minime e la lunghezza massima di n-grammi da generare è configurata tramite argomenti facoltativi.

Gli indici di ricerca di sottostringhe possono utilizzare uno spazio di archiviazione da 10 a 30 volte maggiore come indici di testo completo gli stessi dati, perché la tokenizzazione produce molti più token. Questo è particolarmente vero se come differenza tra ngram_size_min e ngram_size_max cresce. 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 la ricerca di sottostringhe che consentono di analizzare i dati e visualizzare i risultati.

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

Se la ricerca relativa è abilitata nella tokenizzazione, SEARCH_SUBSTRING può eseguire con i seguenti tipi di ricerca relativa:

  • 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
    Ponte sull'acqua inquinata un ponte
    Ponte sull'acqua inquinata ponte , sopra
    Bridge over Troubled Water superare No
    Ponte sull'acqua inquinata acqua instabile No
  • value_suffix: corrisponde a sottostringhe contigue e la corrispondenza deve corrispondere in la fine del valore. Concettualmente simile a ENDS_WITH per le stringhe normalizzate in maiuscole e minuscole e con spazi vuoti.

    Esempi

    Testo archiviato Query sottostringa. Corrispondenza
    Ponte sull'acqua inquinata acque agitate
    Ponte sull'acqua inquinata turbamento; acqua
    Bridge over Troubled Water acqua rublo
    Ponte sull'acqua inquinata acqua travagliata No
    Ponte sull'acqua inquinata problemi di acqua No
    Bridge over Troubled Water un ponte No
  • word_prefix: come value_prefix, ma la stringa deve corrispondere a un termine (piuttosto che limite di valori).

    Esempi

    Testo archiviato Query sulla sottostringa Corrispondenza
    Ponte sull'acqua inquinata over trouble
    Ponte sull'acqua inquinata Superato , problema
    Ponte sull'acqua inquinata acqua troub No
    Ponte sull'acqua inquinata sull'acqua No
    Ponte sull'acqua inquinata 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
    Ponte sull'acqua inquinata ver troubled
    Ponte sull'acqua inquinata in caso di problemi No
    Ponte sull'acqua inquinata sull'acqua No
    Ponte sull'acqua inquinata ove in difficoltà No

Passaggi successivi