Ricerca full-text con tsvector e GIN
Crei una ricerca full-text pronta per la produzione con colonne tsvector, indici GIN e dizionari configurabili per la ricerca testuale.
Ricerca full-text con tsvector e GIN è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
Oltre le sottostringhe: ricerca basata sulle parole
La ricerca full-text (FTS) comprende le parole: stemming, stop word e ranking. PostgreSQL la integra tramite i tipi tsvector / tsquery.
Creare un tsvector
Analizzi un documento:
SELECT to_tsvector('english', 'The quick brown foxes jumped over');
-- 'brown':3 'fox':4 'jump':5 'quick':2Creare una tsquery
Analizzi una query:
SELECT to_tsquery('english', 'fox & jumping'); -- 'fox' & 'jump'
SELECT websearch_to_tsquery('english', 'fox jumping -lazy');Corrispondenza: @@
Verifichi un documento rispetto a una query:
SELECT 'fox jumping'::tsvector @@ 'fox & jump'::tsquery; -- tIndicizzazione per FTS
Aggiunga una colonna tsvector e un indice GIN:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (
to_tsvector('english', coalesce(title,'') || ' ' || coalesce(body,''))
) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN (search_doc);Interrogazione
Ricerca filtrata veloce:
SELECT id, title FROM articles
WHERE search_doc @@ websearch_to_tsquery('english', 'postgres performance')
ORDER BY ts_rank(search_doc, websearch_to_tsquery('english', 'postgres performance')) DESC
LIMIT 20;Ranking con ts_rank
ts_rank assegna un punteggio ai risultati in base alla frequenza e alla posizione delle parole. ts_rank_cd usa Cover Density, tenendo conto della posizione:
SELECT id, ts_rank_cd(search_doc, q) AS rank
FROM articles, websearch_to_tsquery('english', $1) AS q
WHERE search_doc @@ q
ORDER BY rank DESC LIMIT 20;Estratti con ts_headline
Mostri i frammenti corrispondenti evidenziando le parole trovate:
SELECT ts_headline('english', body,
websearch_to_tsquery('english', $1),
'StartSel=<mark>, StopSel=</mark>, MaxFragments=2')
FROM articles
WHERE search_doc @@ websearch_to_tsquery('english', $1);Ricerca di frasi
Trovi le parole adiacenti:
SELECT * FROM articles
WHERE search_doc @@ phraseto_tsquery('english', 'database performance');Ponderazioni per più campi
Attribuisca al titolo un peso maggiore rispetto al corpo usando setweight:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (
setweight(to_tsvector('english', coalesce(title,'')), 'A') ||
setweight(to_tsvector('english', coalesce(body,'')), 'B')
) STORED;Configurazione della lingua
La configurazione english definisce le stop word, lo stemming e così via. PostgreSQL include molte lingue; scelga la lingua appropriata:
SELECT to_tsvector('turkish', 'Veritabanı performansı');Limiti dell'FTS integrato
È adatto alle lingue simili all'inglese e offre un ranking di base. Per esigenze più avanzate (BM25, embedding vettoriali, ricerca per facet), valuti Elasticsearch o OpenSearch insieme a Postgres.
Riepilogo
L'FTS di PostgreSQL è una scelta predefinita efficace.
- tsvector + tsquery + corrispondenza con @@
- Indice GIN per la velocità
- websearch_to_tsquery per l'input degli utenti
- ts_rank/ts_headline per risultati ordinati per rilevanza ed evidenziati
Verifica rapida
Deve filtrare rapidamente gli articoli usando una query full-text. Quale indice sceglie?
Domande Frequenti
La lezione «Ricerca full-text con tsvector e GIN» è gratuita?
Sì — il testo completo di «Ricerca full-text con tsvector e GIN» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «Ricerca full-text con tsvector e GIN»?
Crei una ricerca full-text pronta per la produzione con colonne tsvector, indici GIN e dizionari configurabili per la ricerca testuale. Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Ricerca full-text con tsvector e GIN»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Ricerca per trigrammi (pg_trgm) per il fuzzy matching
- Ricerca full-text con tsvector e GIN
- Indicizzazione geospaziale con PostGIS
- Ricerca vettoriale con pgvector