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:
- Trovare rapidamente stringhe simili con PostgreSQL
- Trovare post simili con PostgreSQL
- Ricerca full-text lenta per termini con alte occorrenze
Combina entrambi
Puoi anche combinare FTS e somiglianza di trigramma: