T1 · Intermediate · 8 دقيقةثابت · آخر مراجعة: 2026-08-19مسودة أولى — بنراجعها

البحث الدلالي — تدوّر بالمعنى مش بالكلمة

في سطر واحد · البحث الدلالي بيحوّل استعلام المستخدم لفيكتور، وبيدوّر على أقرب الفيكتورات ليه في قاعدة بياناتك — فبيلاقي المعنى حتى لو الكلمات مختلفة.

القاموس:EmbeddingHybrid SearchRAGReranking
ليه ده مهم؟

البحث بالكلمة المفتاحية بيفشل لما المستخدم يكتب بصياغة مختلفة عنك؛ البحث الدلالي بيحلّ ده وهو نص أي نظام RAG محترم.

بدل ما تدوّر على تطابق حروف زي Ctrl+F، إنت بتدوّر على تطابق فكرة: النظام بيفهم إن «عربية مكسّرة» و«سيارة تالفة» بيقصدوا نفس الحاجة.

خلينا نفهمها بمثال

زي ما تسأل أمين مكتبة فاهم قصدك بدل ما تقلّب فهرس الكلمات: هو بيجيبلك الكتاب الصح حتى لو وصفت الموضوع بكلامك إنت مش بعنوانه.

مستخدم بيكتب «مش عارف أعمل لوجين» في مركز مساعدة؛ البحث الدلالي بيطلعله مقال «حل مشاكل تسجيل الدخول» رغم إن ولا كلمة اتطابقت حرفيًا.

طيب بتحصل إزاي؟

البحث الدلالي مرحلتين. مرحلة التجهيز (مرة واحدة): بتقطّع مستنداتك لـ chunks، بتعمل لكل قطعة embedding، وبتخزّن الفيكتورات في قاعدة فيكتور. مرحلة الاستعلام (كل مرة): بتعمل embedding لسؤال المستخدم بنفس الموديل بالظبط، بتجيب أقرب k فيكتورات بالـ cosine، وبترجّع النصوص بتاعتهم. لو ده جزء من RAG، النصوص دي بتتحطّ في الـ prompt والموديل بيجاوب منها. أنظمة قوية كتير بتضيف خطوة hybrid: بتدمج نتايج البحث الدلالي مع البحث بالكلمة المفتاحية عشان تمسك الحالتين.

// تدفّق بحث دلالي مصغّر (Workers AI + Vectorize)
// 1) التجهيز — مرة واحدة
for (const chunk of chunks) {
  const { data } = await env.AI.run("@cf/baai/bge-m3", { text: [chunk.text] });
  await env.VECTORIZE.insert([{ id: chunk.id, values: data[0], metadata: { text: chunk.text } }]);
}

// 2) الاستعلام — بنفس الموديل!
const { data } = await env.AI.run("@cf/baai/bge-m3", { text: [userQuery] });
const hits = await env.VECTORIZE.query(data[0], { topK: 5, returnMetadata: "all" });
// hits.matches → أقرب ٥ قطع جاهزة تتحطّ في الـ prompt
خلينا نبنيها

🧪 جرّب بنفسك: هات ١٠ مستندات قصيرة (فقرات من دليل أو مقالات مساعدة)، اعمل لكل واحد embedding وخزّنه، وبعدين جرّب ٣ استعلامات بصياغة مختلفة تمامًا عن نص المستندات. شوف top-3 لكل استعلام: لو نتيجة غلط طلعت فوق، اسأل نفسك — المشكلة في التقطيع ولا الموديل ولا إن الاستعلام محتاج كلمة مفتاحية؟

أشهر الأخطاء

أشهر غلطة: تستخدم موديل مختلف (أو إعدادات مختلفة) للاستعلام عن اللي فهرست بيه المستندات — النتايج بتبقى زبالة بصمت من غير error. غلطة تانية: تعتمد على البحث الدلالي بس وترمي الكلمة المفتاحية — أكواد الأخطاء وأسماء المنتجات والأرقام بتضيع. وتالتة: ترجّع top-k ثابت من غير حد أدنى للتشابه، فلما مفيش حاجة مناسبة فعلًا بترجّع أقرب حاجة موجودة حتى لو مالهاش علاقة.

إمتى تستخدمها؟

استخدمه لما المستخدمين بيسألوا بلغتهم الحرة: مراكز مساعدة، بحث في وثائق داخلية، استرجاع سياق لـ RAG، أو أي حالة الصياغة فيها بتختلف عن نص المستندات.

وإمتى لأ؟

لو الاستعلامات كلها معرّفات دقيقة (SKU، كود خطأ، رقم عقد) الكلمة المفتاحية أدق وأرخص. ولو عندك ٥٠ مستند بس، ممكن تحطّهم كلهم في الـ context مباشرة من غير بحث أصلًا.

خلينا نبنيهاالقراءة خلصت — دلوقتي ابنيها بإيدك.ابني بحث دلالي على ١٠ مستندات