SQL Academy · Pelajaran

Carian Teks Penuh dengan tsvector dan GIN

Bina carian teks penuh untuk pengeluaran dengan lajur tsvector, indeks GIN dan kamus carian teks yang boleh dikonfigurasikan.

Pelajaran 2 daripada 414 langkah

Carian Teks Penuh dengan tsvector dan GIN ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Melangkaui Subrentetan: Carian Berasaskan Perkataan

Carian teks penuh (FTS) memahami perkataan: pengakaran kata, kata henti dan pemeringkatan. PostgreSQL menyediakannya secara terbina dalam melalui jenis tsvector / tsquery.

Bina tsvector

Huraikan dokumen:

SELECT to_tsvector('english', 'The quick brown foxes jumped over');
-- 'brown':3 'fox':4 'jump':5 'quick':2

Bina tsquery

Huraikan pertanyaan:

SELECT to_tsquery('english', 'fox & jumping');     -- 'fox' & 'jump'
SELECT websearch_to_tsquery('english', 'fox jumping -lazy');

Padanan: @@

Uji dokumen terhadap pertanyaan:

SELECT 'fox jumping'::tsvector @@ 'fox & jump'::tsquery;     -- t

Pengindeksan untuk FTS

Tambahkan lajur 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 Pertanyaan

Carian terpantas dengan penapisan:

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 memberikan skor kepada hasil berdasarkan kekerapan dan kedudukan perkataan. ts_rank_cd menggunakan Kepadatan Liputan (mengambil kira kedudukan):

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;

Petikan dengan ts_headline

Paparkan fragmen yang sepadan dengan perkataan sepadan diserlahkan:

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);

Carian Frasa

Cari perkataan yang bersebelahan:

SELECT * FROM articles
WHERE search_doc @@ phraseto_tsquery('english', 'database performance');

Pemberat Berbilang Medan

Berikan pemberat yang lebih tinggi kepada tajuk berbanding 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 mentakrifkan kata henti, pengakaran kata dan sebagainya. PostgreSQL disertakan dengan banyak bahasa; tukar mengikut bahasa:

SELECT to_tsvector('turkish', 'Veritabanı performansı');

Had FTS Terbina Dalam

Sesuai untuk bahasa yang menyerupai bahasa Inggeris dan pemeringkatan asas. Untuk keperluan yang lebih lanjut (BM25, pembenaman vektor, carian berfaset), pertimbangkan Elasticsearch atau OpenSearch bersama Postgres.

Rumusan

FTS PostgreSQL ialah pilihan lalai yang berkeupayaan.

  • Padanan tsvector + tsquery + @@
  • Indeks GIN untuk kelajuan
  • websearch_to_tsquery untuk input manusia
  • ts_rank/ts_headline untuk hasil yang telah diperingkat dan diserlahkan

Semakan Ringkas

Anda perlu menapis artikel dengan cepat berdasarkan pertanyaan teks penuh. Indeks yang manakah patut digunakan?

Percuma untuk bermula

Pelajari SQL dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
46
Pelajaran
183

Soalan Lazim

Adakah pelajaran “Carian Teks Penuh dengan tsvector dan GIN” percuma?

Ya — teks penuh “Carian Teks Penuh dengan tsvector dan GIN” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Carian Teks Penuh dengan tsvector dan GIN”?

Bina carian teks penuh untuk pengeluaran dengan lajur tsvector, indeks GIN dan kamus carian teks yang boleh dikonfigurasikan. Anda berlatih SQL Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan SQL Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Carian Teks Penuh dengan tsvector dan GIN” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Carian Trigram (pg_trgm) untuk Padanan Kabur
  2. Carian Teks Penuh dengan tsvector dan GIN
  3. Pengindeksan Geospatial dengan PostGIS
  4. Carian Vektor dengan pgvector
← Kembali ke SQL Academy