البحث بالترايغرام (pg_trgm) للمطابقة التقريبية
اعثر على السلاسل المتشابهة باستخدام إضافة pg_trgm وفهارس GiST/GIN للترايغرام والدالة similarity()
البحث بالترايغرام (pg_trgm) للمطابقة التقريبية درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
لماذا الثلاثيات؟
لا يستطيع LIKE %word% استخدام فهرس B-tree. وتتيح الثلاثيات («سلاسل فرعية من 3 أحرف») مع GIN أو GiST إجراء بحث سريع تقريبي وبحث سريع عن السلاسل الفرعية.
تمكين الإضافة
تأتي pg_trgm مع PostgreSQL contrib:
CREATE EXTENSION IF NOT EXISTS pg_trgm;ثلاثية كلمة
اعرض الثلاثيات المكوّنة من سلسلة نصية:
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المعامل %
يعيد true إذا تجاوز التشابه العتبة (القيمة الافتراضية 0.3):
SELECT 'database' % 'datbase'; -- t
SET pg_trgm.similarity_threshold = 0.4;فهرس للبحث عن السلاسل الفرعية
يجعل فهرس 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 للبحث التقريبي.
استعلامات المطابقة التقريبية
اعثر على سلاسل نصية متشابهة حتى عند وجود أخطاء إملائية:
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;الإكمال التلقائي باستخدام الثلاثيات
اجمع بين pg_trgm وLIKE ذي البادئة للحصول على إكمال تلقائي سريع الاستجابة:
SELECT name
FROM products
WHERE name % $1
OR name ILIKE $1 || '%'
ORDER BY similarity(name, $1) DESC
LIMIT 8;حدود الثلاثيات
تعمل الثلاثيات على أبجدية المدخل. وتحتاج لغات شرق آسيا إلى تقسيم مختلف للنص. أما للبحث الكامل باللغة الطبيعية، فاستخدم tsvector مع GIN.
الدمج مع الفهارس الأخرى
يمكن لاستعلام يتضمن عوامل تصفية متعددة استخدام فهرس الثلاثيات وفهرس B-tree عبر Bitmap And:
EXPLAIN ANALYZE
SELECT * FROM users
WHERE full_name ILIKE '%ali%' AND country = 'US';مراجعة
تحل pg_trgm مشكلة «البدل الشامل في بداية النمط».
- فهرس GIN للثلاثيات ← LIKE %x% سريع
- المعامل % وsimilarity() للمطابقة التقريبية
- المسافة
<->للترتيب - ممتازة للإكمال التلقائي والبحث المتسامح مع الأخطاء الإملائية
تحقق سريع
لماذا لا يستطيع فهرس B-tree العادي المساعدة في WHERE name LIKE '%alice%'؟
الأسئلة الشائعة
هل درس «البحث بالترايغرام (pg_trgm) للمطابقة التقريبية» مجاني؟
نعم — نص درس «البحث بالترايغرام (pg_trgm) للمطابقة التقريبية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «البحث بالترايغرام (pg_trgm) للمطابقة التقريبية»؟
اعثر على السلاسل المتشابهة باستخدام إضافة pg_trgm وفهارس GiST/GIN للترايغرام والدالة similarity() تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «البحث بالترايغرام (pg_trgm) للمطابقة التقريبية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- البحث بالترايغرام (pg_trgm) للمطابقة التقريبية
- البحث في النص الكامل باستخدام tsvector وGIN
- الفهرسة الجغرافية المكانية باستخدام PostGIS
- البحث المتجهي باستخدام pgvector