การค้นหาไตรแกรม (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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การค้นหาไตรแกรม (pg_trgm) เพื่อการจับคู่แบบคลุมเครือ
- การค้นหาข้อความเต็มด้วย tsvector และ GIN
- การสร้างดัชนีเชิงภูมิสารสนเทศด้วย PostGIS
- การค้นหาเวกเตอร์ด้วย pgvector