PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL :trouver les phrases les plus proches d'une phrase donnée

Recherche plein texte (FTS)

Vous pouvez utiliser plainto_tsquery() à (par documentation ) ...

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

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

Utilisez-le comme :

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

Mais cela reste assez strict et n'offre qu'une tolérance très limitée pour la similitude.

Similitude des trigrammes

Peut-être mieux adapté à la recherche de similarité , même surmonter les fautes de frappe dans une certaine mesure.

Installez le module supplémentaire pg_trgm , créez un index GiST et utilisez l'opérateur de similarité % dans une recherche du voisin le plus proche :

En gros, avec un index trigramme GiST sur 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;

Plus :

Combinez les deux

Vous pouvez même combiner la similarité FTS et trigramme :