مقدمة إلى البحث في النص الكامل (tsvector وto_tsquery)
فهرس المستندات باستخدام tsvector، وشغّل استعلامات اللغة الطبيعية باستخدام to_tsquery، ورتّب النتائج باستخدام ts_rank.
مقدمة إلى البحث في النص الكامل (tsvector وto_tsquery) درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
لماذا البحث في النص الكامل؟
يعثر LIKE/ILIKE على السلاسل الفرعية، بينما يفهم البحث في النص الكامل (FTS) الكلمات: الاشتقاق، وكلمات التوقف، وقواعد اللغة، والصلة المرتبة. وهو مضمّن في PostgreSQL — ولا يحتاج إلى امتداد.
النوعان الأساسيان
يعتمد FTS على نوعين:
tsvector— مستند محلل: وحدات معجمية + مواضعtsquery— استعلام محلل: وحدات معجمية + معاملات منطقية
طابق بينهما باستخدام المعامل @@.
تحليل مستند
حوّل النص الخام إلى tsvector:
SELECT to_tsvector('english', 'The quick brown foxes jump over the lazy dogs');
-- 'brown':3 'dog':9 'fox':4 'jump':5 'lazi':8 'quick':2
-- Stop words ('the', 'over') dropped; words stemmed (foxes → fox)تحليل استعلام
وكذلك إدخال البحث:
SELECT to_tsquery('english', 'foxes & dogs');
-- 'fox' & 'dog'المطابقة
استخدم @@ للاختبار:
SELECT to_tsvector('english', 'The lazy fox')
@@ to_tsquery('english', 'fox'); -- TRUEفهرسة جدول المستندات
أضف عمود tsvector وفهرس GIN لإجراء استعلامات سريعة:
CREATE TABLE articles (
id BIGSERIAL PRIMARY KEY,
title TEXT NOT NULL,
body TEXT NOT NULL
);
-- Either keep a generated tsvector column:
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 @@ to_tsquery('english', 'postgres & json')
ORDER BY id DESC;المعاملات المنطقية في الاستعلامات
يدعم tsquery المعاملات & (AND) و| (OR) و! (NOT)، بالإضافة إلى التجميع:
to_tsquery('english', '(cat | dog) & !rabbit');البحث عن العبارات
استخدم <-> للكلمات المتجاورة:
to_tsquery('english', 'postgres <-> performance');
-- finds 'postgres performance', not 'postgres is great for performance'استعلامات ويب سهلة: websearch_to_tsquery
اقبل الاستعلامات بأسلوب Google:
SELECT websearch_to_tsquery('english', 'postgres "json indexing" -mongo');ترتيب النتائج
رتّب النتائج باستخدام ts_rank أو ts_rank_cd:
SELECT id, title,
ts_rank(search_doc, query) AS rank
FROM articles, to_tsquery('english', 'postgres & json') AS query
WHERE search_doc @@ query
ORDER BY rank DESC
LIMIT 20;تمييز النتائج
اعرض مقتطفات المطابقة:
SELECT ts_headline('english', body,
to_tsquery('english', 'postgres & json'),
'StartSel=<mark>,StopSel=</mark>')
FROM articles
WHERE search_doc @@ to_tsquery('english', 'postgres & json');مراجعة
إن FTS مضمّن في PostgreSQL.
tsvector+tsquery+@@- فهرس GIN للسرعة
- websearch_to_tsquery لإدخال المستخدمين
- ts_rank لترتيب النتائج حسب الصلة
تحقق سريع
ما المعامل الذي يطابق tsvector مع tsquery؟
الأسئلة الشائعة
هل درس «مقدمة إلى البحث في النص الكامل (tsvector وto_tsquery)» مجاني؟
نعم — نص درس «مقدمة إلى البحث في النص الكامل (tsvector وto_tsquery)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «مقدمة إلى البحث في النص الكامل (tsvector وto_tsquery)»؟
فهرس المستندات باستخدام tsvector، وشغّل استعلامات اللغة الطبيعية باستخدام to_tsquery، ورتّب النتائج باستخدام ts_rank. تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «مقدمة إلى البحث في النص الكامل (tsvector وto_tsquery)»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الضم: || وCONCAT
- UPPER وLOWER وSUBSTRING وREPLACE
- TRIM وLPAD وRPAD
- مقدمة إلى البحث في النص الكامل (tsvector وto_tsquery)