0Pricing
SQL Academy · บทเรียน

การค้นหาข้อความเต็มด้วย tsvector และ GIN

สร้างระบบค้นหาข้อความเต็มสำหรับใช้งานจริงด้วยคอลัมน์ tsvector ดัชนี GIN และพจนานุกรมค้นหาข้อความที่กำหนดค่าได้

การค้นหาข้อความเต็มด้วย tsvector และ GIN เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

ก้าวข้ามการค้นหาสตริงย่อย: การค้นหาที่เข้าใจคำ

การค้นหาข้อความเต็มรูปแบบ (FTS) เข้าใจคำต่าง ๆ ได้แก่ การตัดคำลงรากศัพท์ คำหยุด และการจัดอันดับ PostgreSQL มีความสามารถนี้ในตัวผ่านชนิด tsvector / tsquery

สร้าง tsvector

แยกวิเคราะห์เอกสาร:

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

สร้าง tsquery

แยกวิเคราะห์คิวรี:

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

จับคู่: @@

ทดสอบเอกสารกับคิวรี:

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

การทำดัชนีสำหรับ FTS

เพิ่มคอลัมน์ tsvector และดัชนี 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);

การคิวรี

การค้นหาที่กรองอย่างรวดเร็ว:

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;

การจัดอันดับด้วย ts_rank

ts_rank ให้คะแนนผลลัพธ์ตามความถี่และตำแหน่งของคำ ส่วน ts_rank_cd ใช้ความหนาแน่นของการครอบคลุม (คำนึงถึงตำแหน่ง):

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;

ข้อมูลบางส่วนด้วย ts_headline

แสดงส่วนข้อความที่ตรงกัน โดยเน้นคำที่ตรงกัน:

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

การค้นหาวลี

ค้นหาคำที่อยู่ติดกัน:

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

การเพิ่มน้ำหนักหลายฟิลด์

ให้น้ำหนักชื่อเรื่องมากกว่าเนื้อหาโดยใช้ 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;

การกำหนดค่าภาษา

การกำหนดค่า english ระบุคำหยุด การตัดคำลงรากศัพท์ และอื่น ๆ PostgreSQL มาพร้อมกับหลายภาษา คุณสามารถสลับภาษาตามต้องการได้:

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

ข้อจำกัดของ FTS ในตัว

เหมาะสำหรับภาษาที่มีลักษณะคล้ายภาษาอังกฤษและการจัดอันดับพื้นฐาน หากต้องการความสามารถขั้นสูงขึ้น (BM25, เวกเตอร์ฝังความหมาย และการค้นหาแบบมีมิติข้อมูล) โปรดพิจารณาใช้ Elasticsearch หรือ OpenSearch ร่วมกับ Postgres

สรุปทบทวน

FTS ของ PostgreSQL เป็นตัวเลือกเริ่มต้นที่มีความสามารถครบถ้วน

  • การจับคู่ด้วย tsvector + tsquery + @@
  • ดัชนี GIN เพื่อความเร็ว
  • websearch_to_tsquery สำหรับข้อมูลที่ผู้ใช้ป้อน
  • ts_rank/ts_headline สำหรับผลลัพธ์ที่จัดอันดับและเน้นข้อความ

ตรวจสอบอย่างรวดเร็ว

คุณต้องกรองบทความอย่างรวดเร็วด้วยคิวรีข้อความเต็มรูปแบบ ควรใช้ดัชนีใด

คำถามที่พบบ่อย

บทเรียน “การค้นหาข้อความเต็มด้วย tsvector และ GIN” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การค้นหาข้อความเต็มด้วย tsvector และ GIN” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การค้นหาข้อความเต็มด้วย tsvector และ GIN”

สร้างระบบค้นหาข้อความเต็มสำหรับใช้งานจริงด้วยคอลัมน์ tsvector ดัชนี GIN และพจนานุกรมค้นหาข้อความที่กำหนดค่าได้ คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การค้นหาข้อความเต็มด้วย tsvector และ GIN” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การค้นหาไตรแกรม (pg_trgm) เพื่อการจับคู่แบบคลุมเครือ
  2. การค้นหาข้อความเต็มด้วย tsvector และ GIN
  3. การสร้างดัชนีเชิงภูมิสารสนเทศด้วย PostGIS
  4. การค้นหาเวกเตอร์ด้วย pgvector
← กลับไปที่ SQL Academy