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 :
- Trouver rapidement des chaînes similaires avec PostgreSQL
- Rechercher des messages similaires avec PostgreSQL
- Recherche en texte intégral lente pour les termes à occurrence élevée
Combinez les deux
Vous pouvez même combiner la similarité FTS et trigramme :