Fuld tekstsøgning (FTS)
Du kan bruge plainto_tsquery()
til (pr. dokumentation
) ...
SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')
plainto_tsquery
------------------
'sentenc' & 'irrelev' & 'word' & 'punctuat'
Brug det som:
SELECT *
FROM tbl
WHERE to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');
Men det er stadig ret strengt og giver kun meget begrænset tolerance for lighed.
Trigram-lighed
Måske bedre egnet til at søge efter lighed , selv overvinde stavefejl til en vis grad.
Installer det ekstra modul pg_trgm
, opret et GiST-indeks og brug lighedsoperatoren %
i en nærmeste nabosøgning :
Grundlæggende med et trigram GiST-indeks på 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;
Mere:
- Hurtigt at finde lignende strenge med PostgreSQL
- Sådan finder du lignende indlæg med PostgreSQL
- Langsom fuldtekstsøgning efter termer med høj forekomst
Kombiner begge
Du kan endda kombinere FTS og trigram-lighed: