Pencarian Teks Lengkap dengan tsvector dan GIN
Bangun pencarian teks lengkap untuk produksi dengan kolom tsvector, indeks GIN, dan kamus pencarian teks yang dapat dikonfigurasi
Pencarian Teks Lengkap dengan tsvector dan GIN adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Melampaui Substring: Pencarian Berbasis Kata
Pencarian teks lengkap (FTS) memahami kata: stemming, kata yang diabaikan, dan pemeringkatan. PostgreSQL menyediakannya secara bawaan melalui tipe tsvector / tsquery.
Membangun tsvector
Uraikan dokumen:
SELECT to_tsvector('english', 'The quick brown foxes jumped over');
-- 'brown':3 'fox':4 'jump':5 'quick':2Membangun tsquery
Uraikan kueri:
SELECT to_tsquery('english', 'fox & jumping'); -- 'fox' & 'jump'
SELECT websearch_to_tsquery('english', 'fox jumping -lazy');Pencocokan: @@
Uji dokumen terhadap kueri:
SELECT 'fox jumping'::tsvector @@ 'fox & jump'::tsquery; -- tPengindeksan untuk FTS
Tambahkan kolom tsvector dan indeks GIN:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (
to_tsvector('english', coalesce(title,'') || ' ' || coalesce(body,''))
) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN (search_doc);Membuat Kueri
Pencarian terfilter yang cepat:
SELECT id, title FROM articles
WHERE search_doc @@ websearch_to_tsquery('english', 'postgres performance')
ORDER BY ts_rank(search_doc, websearch_to_tsquery('english', 'postgres performance')) DESC
LIMIT 20;Pemeringkatan dengan ts_rank
ts_rank memberi skor pada hasil berdasarkan frekuensi dan posisi kata. ts_rank_cd menggunakan Kepadatan Cakupan (memperhitungkan posisi):
SELECT id, ts_rank_cd(search_doc, q) AS rank
FROM articles, websearch_to_tsquery('english', $1) AS q
WHERE search_doc @@ q
ORDER BY rank DESC LIMIT 20;Cuplikan dengan ts_headline
Tampilkan fragmen yang cocok dengan kata-kata yang cocok disorot:
SELECT ts_headline('english', body,
websearch_to_tsquery('english', $1),
'StartSel=<mark>, StopSel=</mark>, MaxFragments=2')
FROM articles
WHERE search_doc @@ websearch_to_tsquery('english', $1);Pencarian Frasa
Temukan kata-kata yang berdekatan:
SELECT * FROM articles
WHERE search_doc @@ phraseto_tsquery('english', 'database performance');Pemberian Bobot Multi-Kolom
Berikan bobot lebih besar pada judul daripada isi menggunakan setweight:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (
setweight(to_tsvector('english', coalesce(title,'')), 'A') ||
setweight(to_tsvector('english', coalesce(body,'')), 'B')
) STORED;Konfigurasi Bahasa
Konfigurasi english menentukan kata yang diabaikan, stemming, dan sebagainya. PostgreSQL menyediakan banyak bahasa; beralihlah sesuai bahasa:
SELECT to_tsvector('turkish', 'Veritabanı performansı');Batasan FTS Bawaan
Cocok untuk bahasa yang mirip bahasa Inggris dengan pemeringkatan dasar. Untuk kebutuhan yang lebih canggih (BM25, embedding vektor, pencarian berfaset), pertimbangkan Elasticsearch atau OpenSearch bersama Postgres.
Ringkasan
FTS PostgreSQL adalah pilihan bawaan yang andal.
- pencocokan tsvector + tsquery + @@
- indeks GIN untuk kecepatan
- websearch_to_tsquery untuk input manusia
- ts_rank/ts_headline untuk hasil yang diberi peringkat dan disorot
Pemeriksaan Singkat
Anda perlu memfilter artikel dengan cepat berdasarkan kueri teks lengkap. Indeks apa yang digunakan?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pencarian Teks Lengkap dengan tsvector dan GIN” gratis?
Ya — teks lengkap “Pencarian Teks Lengkap dengan tsvector dan GIN” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pencarian Teks Lengkap dengan tsvector dan GIN”?
Bangun pencarian teks lengkap untuk produksi dengan kolom tsvector, indeks GIN, dan kamus pencarian teks yang dapat dikonfigurasi Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Pencarian Teks Lengkap dengan tsvector dan GIN” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pencarian Trigram (pg_trgm) untuk Pencocokan Samar
- Pencarian Teks Lengkap dengan tsvector dan GIN
- Pengindeksan Geospasial dengan PostGIS
- Pencarian Vektor dengan pgvector