La ricerca a testo intero (FTS) consente di identificare i documenti in linguaggio naturale che soddisfano una query. Questo approccio è più efficace della corrispondenza di stringhe standard perché tiene conto delle sfumature linguistiche, ad esempio ignorando le parole comuni come "il" e facendo corrispondere diverse forme di una parola, come "correre", "correndo" o "corse".
AlloyDB per PostgreSQL supporta tutte le funzionalità di ricerca a testo intero. Oltre al supporto per gli indici GIN e GiST, AlloyDB fornisce anche l'estensione RUM per la ricerca a testo intero ad alte prestazioni. PostgreSQL 17 o versioni precedenti supporta questa estensione.
Concetti principali della ricerca a testo intero
Per implementare in modo efficace la ricerca a testo intero (FTS), devi capire come PostgreSQL elabora e cerca il testo. L'unità di ricerca, un documento, è in genere una colonna di testo o una combinazione di colonne di una riga. La procedura di creazione dell'indice analizza questo documento per associare le parole (o lessemi, la forma base di una parola) alla riga.
Questa procedura prevede una pipeline di pre-elaborazione che trasforma il testo non elaborato in un formato ricercabile:
- Suddividendo il testo in token.
- Rimuovendo le parole comuni.
- Normalizzando le parole alla loro forma radicale; ad esempio, "correre" è il lessema di "correre", "corri", "correndo" e "corse".
L'utilizzo della ricerca a testo intero richiede anche di conoscere i tipi di dati specializzati, gli operatori e le varie strategie di indicizzazione, inclusi gli indici PostgreSQL integrati e gli indici RUM ad alte prestazioni.
PostgreSQL utilizza due tipi di dati principali e un operatore di corrispondenza per gestire la ricerca a testo intero:
tsvector: rappresenta un documento in un formato ricercabile, come un elenco ordinato di lessemi distinti.tsquery: rappresenta i termini di ricerca, inclusi gli operatori booleani che consentono di combinare i lessemi.@@: verifica se untsvectorcorrisponde a untsquery, consentendo ricerche linguistiche.
AlloyDB supporta tutti i tipi di indici per la ricerca a testo intero supportati da PostgreSQL integrato. La scelta dell'indice dipende dall'equilibrio tra velocità di ricerca, tempo di creazione dell'indice, velocità di aggiornamento e le funzionalità di ricerca specifiche richieste, come la ricerca di frasi o la classificazione per pertinenza.
AlloyDB supporta anche l'estensione RUM per operazioni di ricerca a testo intero complesse. RUM migliora gli indici GIN standard memorizzando le informazioni posizionali direttamente nell'indice, consentendoti di eseguire ricerche di frasi e classificazioni per pertinenza più veloci senza accedere ai dati della tabella.
Per saperne di più su come creare e utilizzare gli indici RUM in AlloyDB, consulta Creare e gestire un indice RUM.
Combinare la ricerca a testo intero e la ricerca semantica
Le implementazioni di ricerca più potenti spesso combinano la ricerca a testo intero utilizzando gli indici RUM e la ricerca vettoriale. Utilizza la ricerca ibrida per unire i punti di forza della comprensione semantica e della corrispondenza esatta delle parole chiave, unendo i set di risultati distinti per una classificazione completa.
Ad esempio, in un'applicazione di e-commerce, potresti prima utilizzare la ricerca a testo intero con RUM per trovare i prodotti contenenti parole chiave specifiche come "scarpe da corsa" e utilizzare la ricerca vettoriale per trovare i risultati in base alla somiglianza semantica con una query più dettagliata di un utente, ad esempio "calzature comode per l'allenamento a lunga distanza". Il database unisce quindi i risultati classificati di entrambi i componenti di ricerca in un unico elenco unificato utilizzando l'algoritmo Reciprocal Rank Fusion (RRF) per produrre una classificazione finale.
Per saperne di più sull'utilizzo di questo approccio ibrido, consulta Eseguire una ricerca ibrida di somiglianza vettoriale.
Passaggi successivi
- Scopri come creare e gestire un indice RUM.
- Scopri come eseguire una ricerca ibrida di somiglianza vettoriale.