0Pricing
SQL Academy · درس

البحث في النص الكامل باستخدام tsvector وGIN

أنشئ بحثًا في النص الكامل جاهزًا للإنتاج باستخدام أعمدة tsvector وفهارس GIN وقواميس قابلة للتهيئة للبحث النصي

البحث في النص الكامل باستخدام tsvector وGIN درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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

الفهرسة للبحث بالنص الكامل

أضف عمود 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ı');

حدود البحث بالنص الكامل المدمج

يعمل جيدًا مع اللغات المشابهة للإنجليزية ويوفر ترتيبًا أساسيًا للنتائج. أما للاحتياجات الأكثر تقدمًا، مثل BM25 وتضمينات المتجهات والبحث متعدد الأوجه، ففكّر في استخدام Elasticsearch أو OpenSearch إلى جانب Postgres.

خلاصة

يُعد البحث بالنص الكامل في PostgreSQL خيارًا افتراضيًا كفؤًا.

  • المطابقة باستخدام tsvector وtsquery و@@
  • فهرس GIN لتسريع البحث
  • websearch_to_tsquery لمعالجة إدخال المستخدم
  • ts_rank وts_headline للحصول على نتائج مرتبة ومميزة

تحقق سريع

تحتاج إلى تصفية المقالات بسرعة باستخدام استعلام بحث بالنص الكامل. أي فهرس تختار؟

الأسئلة الشائعة

هل درس «البحث في النص الكامل باستخدام tsvector وGIN» مجاني؟

نعم — نص درس «البحث في النص الكامل باستخدام tsvector وGIN» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «البحث في النص الكامل باستخدام tsvector وGIN»؟

أنشئ بحثًا في النص الكامل جاهزًا للإنتاج باستخدام أعمدة tsvector وفهارس GIN وقواميس قابلة للتهيئة للبحث النصي تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «البحث في النص الكامل باستخدام tsvector وGIN»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. البحث بالترايغرام (pg_trgm) للمطابقة التقريبية
  2. البحث في النص الكامل باستخدام tsvector وGIN
  3. الفهرسة الجغرافية المكانية باستخدام PostGIS
  4. البحث المتجهي باستخدام pgvector
← العودة إلى SQL Academy