PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Ricerca di testo completo di PostgreSQL e confusione di trigrammi

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