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

PostgreSQL:trova le frasi più vicine a una data frase

Ricerca di testo completo (FTS)

Potresti usare plainto_tsquery() a (per documentazione ) ...

SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')

 plainto_tsquery
------------------
 'sentenc' & 'irrelev' & 'word' & 'punctuat'

Usalo come:

SELECT *
FROM   tbl
WHERE  to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');

Ma questo è ancora piuttosto rigoroso e fornisce solo una tolleranza molto limitata per la somiglianza.

Somiglianza trigramma

Potrebbe essere più adatto per cercare somiglianza , anche superare in una certa misura gli errori di battitura.

Installa il modulo aggiuntivo pg_trgm , crea un indice GiST e usa l'operatore di somiglianza % in una ricerca vicino più vicino :

Fondamentalmente, con un indice GiST trigram su sentence :

-- SELECT set_limit(0.3);  -- adjust tolerance if needed

SELECT *
FROM   tbl
WHERE  sentence % 'My new sentence'
ORDER  BY sentence <-> 'My new sentence'
LIMIT  10;

Altro:

Combina entrambi

Puoi anche combinare FTS e somiglianza di trigramma: