Fulltextsökning (FTS)
Du kan använda plainto_tsquery()
till (per dokumentation
) ...
SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')
plainto_tsquery
------------------
'sentenc' & 'irrelev' & 'word' & 'punctuat'
Använd det som:
SELECT *
FROM tbl
WHERE to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');
Men det är fortfarande ganska strikt och ger bara mycket begränsad tolerans för likhet.
Trigramlikhet
Kan vara bättre lämpad att söka efter likhet , till och med övervinna stavfel till viss del.
Installera tilläggsmodulen pg_trgm
, skapa ett GiST-index och använd likhetsoperatorn %
i en närmaste grannesökning :
I grund och botten med ett trigram GiST-index 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;
Mer:
- Hitta liknande strängar snabbt med PostgreSQL
- Hittar liknande inlägg med PostgreSQL
- Långsam fulltextsökning efter termer med hög förekomst
Kombinera båda
Du kan till och med kombinera FTS- och trigramlikhet: