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

การค้นหาไตรแกรม (pg_trgm) เพื่อการจับคู่แบบคลุมเครือ

ค้นหาข้อความที่คล้ายกันด้วยส่วนขยาย pg_trgm ดัชนีไตรแกรม GiST/GIN และ similarity()

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

เหตุใดจึงใช้ Trigram

LIKE %word% ไม่สามารถใช้ดัชนีแบบ B-tree ได้ Trigram ("สตริงย่อยที่มีอักขระ 3 ตัว") เมื่อใช้ร่วมกับ GIN/GiST จะช่วยให้ค้นหาแบบคลุมเครือและค้นหาสตริงย่อยได้รวดเร็ว

เปิดใช้ส่วนขยาย

pg_trgm มาพร้อมกับส่วน contrib ของ PostgreSQL:

CREATE EXTENSION IF NOT EXISTS pg_trgm;

Trigram ของคำ

แสดง trigram ของสตริง:

SELECT show_trgm('database');
-- {dat, aba, atab, tab, abas, base, ase, ...}

ฟังก์ชันความคล้ายคลึง

ค่าทศนิยมในช่วง [0..1]:

SELECT similarity('database', 'datbase');     -- ~0.75
SELECT similarity('hello', 'world');             -- ~0.0

ตัวดำเนินการ %

คืนค่าเป็นจริงหากความคล้ายคลึงสูงกว่าเกณฑ์ (ค่าเริ่มต้นคือ 0.3):

SELECT 'database' % 'datbase';      -- t
SET pg_trgm.similarity_threshold = 0.4;

ดัชนีสำหรับการค้นหาสตริงย่อย

ดัชนี trigram แบบ GIN ทำให้ LIKE '%word%' ทำงานได้รวดเร็ว:

CREATE INDEX users_name_trgm ON users USING GIN (full_name gin_trgm_ops);

-- Now this is index-supported:
SELECT * FROM users WHERE full_name ILIKE '%ali%';

GiST เทียบกับ GIN

  • GIN — อ่านเร็วกว่า เขียนช้ากว่า และดัชนีมีขนาดใหญ่กว่า
  • GiST — เขียนเร็วกว่า อ่านช้ากว่า และดัชนีมีขนาดเล็กกว่า

ทีมส่วนใหญ่เลือก GIN สำหรับการค้นหาแบบคลุมเครือ

Query การจับคู่แบบคลุมเครือ

ค้นหาสตริงที่คล้ายกันได้แม้มีการพิมพ์ผิด:

SELECT full_name, similarity(full_name, 'datbase') AS sim
FROM users
WHERE full_name % 'datbase'
ORDER BY sim DESC
LIMIT 10;

ระยะทางสำหรับการจัดอันดับ

ตัวดำเนินการ <-> คืนค่าระยะทาง (1 - ความคล้ายคลึง) ดังนั้นคุณจึงใช้ ORDER BY distance ASC ได้:

SELECT full_name
FROM users
WHERE full_name % 'alice'
ORDER BY full_name <-> 'alice'
LIMIT 10;

การเติมข้อความอัตโนมัติด้วย Trigram

ใช้ pg_trgm ร่วมกับ LIKE แบบคำนำหน้าเพื่อสร้างการเติมข้อความอัตโนมัติที่ตอบสนองรวดเร็ว:

SELECT name
FROM products
WHERE name % $1
   OR name ILIKE $1 || '%'
ORDER BY similarity(name, $1) DESC
LIMIT 8;

ข้อจำกัดของ Trigram

Trigram ทำงานกับชุดอักขระของข้อมูลนำเข้า ภาษา CJK ต้องใช้การตัดคำแบบอื่น สำหรับการค้นหาภาษาธรรมชาติแบบเต็มรูปแบบ ให้ใช้ tsvector ร่วมกับ GIN

การใช้ร่วมกับดัชนีอื่น

Query ที่มีตัวกรองหลายรายการสามารถใช้ทั้งดัชนี trigram และ B-tree ผ่าน Bitmap And ได้:

EXPLAIN ANALYZE
SELECT * FROM users
WHERE full_name ILIKE '%ali%' AND country = 'US';

สรุป

pg_trgm แก้ปัญหา "ไวลด์การ์ดนำหน้า"

  • ดัชนี trigram แบบ GIN → LIKE %x% ทำงานได้รวดเร็ว
  • ตัวดำเนินการ % และ similarity() สำหรับการจับคู่แบบคลุมเครือ
  • ระยะทาง <-> สำหรับการจัดอันดับ
  • เหมาะอย่างยิ่งกับการเติมข้อความอัตโนมัติและการค้นหาที่ทนต่อการพิมพ์ผิด

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

เหตุใดดัชนี B-tree ทั่วไปจึงไม่สามารถช่วยกับ WHERE name LIKE '%alice%' ได้

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

บทเรียน “การค้นหาไตรแกรม (pg_trgm) เพื่อการจับคู่แบบคลุมเครือ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การค้นหาไตรแกรม (pg_trgm) เพื่อการจับคู่แบบคลุมเครือ”

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

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

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

บทเรียน “การค้นหาไตรแกรม (pg_trgm) เพื่อการจับคู่แบบคลุมเครือ” ใช้เวลานานแค่ไหน

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

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

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

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

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