Penelusuran Teks Lengkap (FTS)
Anda dapat menggunakan plainto_tsquery()
ke (per dokumentasi
) ...
SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')
plainto_tsquery
------------------
'sentenc' & 'irrelev' & 'word' & 'punctuat'
Gunakan seperti:
SELECT *
FROM tbl
WHERE to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');
Tapi itu masih agak ketat dan hanya memberikan toleransi yang sangat terbatas untuk kesamaan.
Kesamaan trigram
Mungkin lebih cocok untuk mencari kesamaan , bahkan mengatasi kesalahan ketik sampai taraf tertentu.
Instal modul tambahan pg_trgm
, buat indeks GiST dan gunakan operator kesamaan %
dalam penelusuran tetangga terdekat :
Pada dasarnya, dengan indeks GiST trigram pada 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;
Selengkapnya:
- Menemukan string serupa dengan PostgreSQL dengan cepat
- Menemukan postingan serupa dengan PostgreSQL
- Penelusuran teks lengkap yang lambat untuk istilah dengan kemunculan tinggi
Gabungkan keduanya
Anda bahkan dapat menggabungkan kesamaan FTS dan trigram: