Servono a scopi molto diversi.
- La ricerca di testo completo viene utilizzata per restituire documenti che corrispondono a una query di ricerca di parole derivate.
- I trigrammi forniscono un metodo per confrontare due stringhe e determinare quanto sono simili.
Considera i seguenti esempi:
SELECT 'cat' % 'cats'; --true
Quanto sopra restituisce true perché 'cat'
è abbastanza simile a 'cats'
(come dettato dal limite pg_trgm).
SELECT 'there is a cat with a dog' % 'cats'; --false
Quanto sopra restituisce false
perché %
sta cercando in modo simile tra le due intere stringhe, non cercando la parola cats
dentro la stringa.
SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true
Questo restituisce true
perché tsvector ha trasformato la stringa in un elenco di parole derivate e ha ignorato un gruppo di parole comuni (stop words - come 'is' &'a')... quindi ha cercato la versione stem di cats
.
Sembra che tu voglia usare i trigrammi per correggere automaticamente il tuo ts_query
ma ciò non è realmente possibile (non in alcun modo efficiente comunque). In realtà non sanno una parola è scritta in modo errato, quanto potrebbe essere simile a un'altra parola. Loro potrebbero essere usato per cercare una tabella di parole per cercare di trovare parole simili, permettendoti di implementare una funzione di tipo "intendevi...", ma questa parola richiede il mantenimento di una tabella separata contenente tutte le parole usate nella tua ricerca search
campo.
Se hai alcune parole/frasi comunemente scritte in modo errato che desideri che l'indice di testo corrisponda, potresti voler guardare i dizionari dei sinonimi