全文検索(FTS)
plainto_tsquery()
を使用できます to(ドキュメントごと
)...
SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')
plainto_tsquery
------------------
'sentenc' & 'irrelev' & 'word' & 'punctuat'
次のように使用します:
SELECT *
FROM tbl
WHERE to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');
しかし、それでもかなり厳格であり、類似性に対する許容範囲は非常に限られています。
トリグラムの類似性
類似性の検索に適している可能性があります 、タイプミスもある程度克服します。
追加モジュール pg_trgm
をインストールします
、GiSTインデックスを作成し、類似性演算子<を使用します。コード>%
最近傍検索で :
基本的に、文
にトリグラムGiSTインデックスを使用します :
-- 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;
詳細:
両方を組み合わせる
FTSとトリグラムの類似性を組み合わせることもできます: