Full Text Search (FTS)
Můžete použít plainto_tsquery()
na (podle dokumentace
) ...
SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')
plainto_tsquery
------------------
'sentenc' & 'irrelev' & 'word' & 'punctuat'
Použijte to jako:
SELECT *
FROM tbl
WHERE to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');
Ale to je stále dost striktní a poskytuje jen velmi omezenou toleranci pro podobnost.
Podobnost trigramů
Může být vhodnější pro hledání podobnosti , dokonce do určité míry překonat překlepy.
Nainstalujte si doplňkový modul pg_trgm
, vytvořte index GiST a použijte operátor podobnosti %
při hledání nejbližšího souseda :
V podstatě s trigramovým GiST indexem na 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;
Více:
- Rychlé nalezení podobných řetězců pomocí PostgreSQL
- Hledání podobných příspěvků pomocí PostgreSQL
- Pomalé fulltextové vyhledávání výrazů s vysokým výskytem
Zkombinujte obě
Dokonce můžete kombinovat FTS a podobnost trigramů: