المراجعة والاختبار النّهائيّ
ستّ عشرة وحدة للانتقال من LIKE '%mot%' إلى محرّك بحث وتوصية كامل: تُفهرس Veille 200 853 مقالًا، وتجدها بالصّلة ورغم الأخطاء، وتُحلِّلها في Kibana، وتربط 23 082 مؤلّفًا بـ 41 فئة في Neo4j، وتُوصي بما يُقرأ بعده من سكربت Python. إليك الدّورة مضغوطة، والخيوط الّتي تعبرها، وقائمة تحقّق محرّك جاهز للعرض على عميل.
الدّورة في لمحة
| الوحدة | الجوهر الواجب حفظه |
|---|---|
| 1. حقيبة Veille | doctor قبل up ؛ ينتظر up أن تجيب كلّ خدمة؛ يُعيد reset حالة نظيفة. Kibana على 5601، وNeo4j Browser على 7474، والكلّ بكلمة veille2026. |
| 2. المفاهيم المفتاحيّة | الفهرس مقسَّم إلى shards، ولكلّ shard نُسَخ ممكنة؛ تكون العقدة الوحيدة green بصفر نسخة؛ يُقرأ _cat و_cluster/health أوّلًا. |
3. المستندات و_bulk | ينشئ PUT أو يستبدل، ويُدمج POST _update، ويحمي _seq_no/_primary_term من الطّمس؛ _bulk = NDJSON، سطران لكلّ مستند، دفعات من 1 000 إلى 5 000. |
| 4. Mapping | يُحلَّل text للبحث، ويُبقى keyword دقيقًا للفلترة والتّرتيب والتّجميع؛ يُخمّن mapping الديناميكيّ ويقرّر الصّريح؛ تغيير نوع = _reindex. |
| 5. Query DSL | match للنّصّ، وterm للدّقيق، وrange للتّواريخ؛ يجمع bool بين must وshould وfilter وmust_not ؛ لا يحسب سياق الفلتر درجةً ويُخزَّن مؤقّتًا. |
| 6. التّجميعات | size: 0 ؛ وterms وdate_histogram مع calendar_interval وcardinality وstats وtop_hits ؛ التّجميعات الفرعيّة تُجيب عن الأسئلة المتقاطعة (فئات بحسب السّنة). |
| 7. Kibana | Data View مع الحقل الزّمنيّ date والنّطاق 2012-2018 ؛ Discover + KQL للاستكشاف؛ Lens للتّجسيد؛ تُصدَّر لوحة القيادة .ndjson. |
| 8. البحث المتقدّم | completion على headline.suggest (max_input_length 120)، وfuzziness: AUTO، ومُقترِح phrase ؛ يتسلسل ES|QL في FROM ثمّ WHERE ثمّ STATS … BY ثمّ SORT ؛ تُتيح الأسماء المستعارة إعادة الفهرسة بلا انقطاع. |
| 9. OpenSearch | تفرّع عن Elasticsearch 7.10 برخصة Apache 2.0 منذ 2021 ؛ نفس استعلامات الأساس، أمان وإضافات مختلفة؛ اختر بحسب الرّخصة والمُضيف والوظائف، لا بحسب الموضة. |
| 10. Neo4j وCypher | عقد، وتسميات، وعلاقات موجَّهة ومطبوعة، وخصائص؛ يقرأ MATCH (a)-[:REL]->(b) الرّسم كما يُرسَم؛ وMERGE بدل CREATE لإعادة التّشغيل بلا تكرار. |
| 11. النّمذجة والتّحميل | ما يُصفَّى أو يُجتاز يصير عقدة، وما يُعرَض يبقى خاصّيّة؛ قيود الفرادة أوّلًا؛ LOAD CSV + CALL { } IN TRANSACTIONS (مع :auto في Browser). |
| 12. Cypher المتقدّم | مسارات *1..3، وshortestPath، وOPTIONAL MATCH، وWITH/collect/UNWIND، وCASE ؛ تحلّ توصية الجوار في استعلام واحد؛ يكشف PROFILE الفهارس المفقودة والحاصل الدّيكارتيّ. |
| 13. Python | ينفّذ ./lab.sh python سكربتاتك بالزّبائن الرّسميّين؛ Elasticsearch(url, basic_auth) وGraphDatabase.driver(uri, auth) ؛ يجمع veille.py بين البحث والتّوصية. |
| 14. الأمان والتّشغيل | المستخدمون والأدوار عبر _security، ومفاتيح API، وsnapshots fs مع path.repo ؛ يُدير Neo4j Community مستخدمين لا أدوارًا دقيقة؛ _cat/nodes وdocker stats للمراقبة. |
| 15. التّشخيص | اثنتا عشرة عطلًا، وطريقة واحدة: الحالة، والسّجلّات، والعزل، وإعادة التّهيئة، وطلب المساعدة بالمعلومات الصّحيحة. |
| 16. مشروع Veille | mapping مبرَّر، وخمسة استعلامات لكلّ persona، ولوحة قيادة بأربع مرئيّات، ورسم بيانيّ متحقَّق منه، وخمسة استعلامات توصية، وسكربت جامع، وعرض في خمس دقائق. |
الخيوط الّتي تعبر الدّورة
Mapping يقرّر كلّ ما يأتي بعده. فئة من نوع text لا تُجمَّع بشكل سليم، وعنوان من نوع keyword لا يُبحَث فيه، وتاريخ في سلسلة نصّيّة لا يُرتَّب. تضع الوحدة 4 القاعدة، وتعيش عليها الوحدات من 5 إلى 8: كلّ استعلام «لا يجد شيئًا» أو كلّ تجميع «يُعيد قطعًا من كلمات» يُصحَّح في الـmapping، أي بـ _reindex، لا بلَيّ الاستعلام أبدًا.
البحث والفلترة عمليّتان مختلفتان. يحسب سياق الاستعلام درجةً ويكلّف غاليًا؛ يجيب سياق الفلتر نعم أو لا ويُخزَّن مؤقّتًا. وضع category وdate في filter والإبقاء على headline في must ليس تجميلًا: هو ما يُبقي محرّك Veille سريعًا تحت الحمل. تُطبّق Kibana الفصل نفسه بين شريط KQL والفلاتر المُثبَّتة.
الرّسم البيانيّ يُجيب عن الأسئلة الّتي تُصعِّبها الوصلات (jointures). من يكتب في الفئات نفسها الّتي يكتب فيها Lee Moran ؟ ما المقالات الحديثة لمؤلّفي هذه النّتيجة ؟ أيّ سلسلة تربط مؤلّفَين ؟ في SQL، تُضاف وصلة عند كلّ عمق؛ في Cypher، يكفي *1..3. يعثر Elasticsearch على نقطة الدّخول، ويستكشف Neo4j حولها: تُجمِّعهما الوحدة 13 في سكربت واحد، وتصنع منهما الوحدة 16 منتَجًا كاملًا.
العطلة تُقرأ قبل أن تُصلَح. رمز الخروج 137، وcluster_block_exception، و« Couldn't load the external resource »، و« can only be executed in an implicit transaction » : كلّ رسالة في الوحدة 15 تُقابل سببًا واحدًا وأمرًا واحدًا في الحقيبة. لا يُكتسَب الانعكاس بإعادة التّشغيل عشوائيًّا، بل بقراءة ./lab.sh status ثمّ ./lab.sh logs <service> ومقارنة الرّسالة بالجدول.
الأمان قرار معماريّ لا زخرفة نهائيّة. يُفعِّل الكيت xpack.security.enabled=true منذ الدّقيقة الأولى، فيبقى الفصل بين المستخدم elastic ومفتاح API لكريم متجذّرًا في الحقيبة لا مُضافًا في اللّحظة الأخيرة قبل التّسليم لأيّ عميل. تُثبت snapshots في الوحدة 14 المبدأ نفسه: النّسخة تُفكَّر فيها قبل الحادث، لا بعده، ويُختبر استرجاعها في فهرس مُعاد التّسمية بدل الفهرس الحيّ حرصًا على سلامة بيانات الإنتاج.
قائمة تحقّق محرّك Veille جاهز للعرض
./lab.sh doctorكلّه أخضر، و./lab.sh statusيعرض ثلاث مستوعباتhealthy.- يُعيد
GET news/_countالقيمة 200 853 ويعرضGET news/_mappingأنّcategoryمن نوعkeyword، وheadlineمن نوعtextمعrawوsuggest، وdateمن نوعdate. - استعلام
boolلكلّ persona، معheadlineفيmustوcategory+dateفيfilter، كلّ منها معلَّق (ما يبحث عنه، لمَ هذه الدّرجة). - تجميع
termsعلىcategoryوdate_histogramبحسب الشّهر، تُقابل أرقامها ما تعرضه لوحة Kibana. - Data View
newsمع الحقل الزّمنيّdate، ولوحة قيادة بأربع مرئيّات مُصدَّرة إلى.ndjsonفي مجلّد المشروع. - استعلام إكمال تلقائيّ على
headline.suggestوبحث متسامح مع الأخطاء بـfuzziness: AUTO. - يُعيد
CALL apoc.meta.stats()القيم 200 853Articleو41Categorieو23 082Auteur؛ ويسردSHOW CONSTRAINTSالقيود الثّلاثة على الفرادة. - خمسة استعلامات Cypher للتّوصية، منها استعلام بجوار المؤلّفين وآخر بأقصر مسار، كلّ منها مُختبَر بـ
PROFILEبلا حاصل ديكارتيّ. - يُعيد
./lab.sh python veille.py <sujet>نتائج وتوصيات في أقلّ من خمس ثوان، مع فلترة الفئة والفترة. - مستخدم Elasticsearch للقراءة فقط لواجهة كريم، وsnapshot للفهرس
newsقابل للاستعادة. - إعادة قراءة جدول الاثنتَي عشرة عطلًا، ويقين معرفة ما تفعل أمام كلّ منها.
الاختبار النّهائيّ
يتضمّن الاختبار 40 سؤالًا تُغطّي الوحدات الستّ عشرة: الحقيبة والمفاهيم، والمستندات و_bulk، وMapping والمُحلِّلات، وQuery DSL والصّلة، والتّجميعات، وKibana، والإكمال التّلقائيّ وES|QL، وOpenSearch، وCypher والنّمذجة، وLOAD CSV، وCypher المتقدّم، وPython، والأمان والنّسخ الاحتياطيّة، والتّشخيص، والمشروع.
تعرض عدّة أسئلة حالات للتّشخيص: أيّ نوع حقل تختار لفئة تريد تجميعها؛ لماذا يُعيد استعلام match على keyword صفر نتيجة ؛ ماذا يعني عنقود yellow على عقدة واحدة ؛ كيف تقرأ cluster_block_exception ؛ لماذا لا يجد LOAD CSV ملفّ news.csv ؛ ما الفرق بين MERGE وCREATE عند إعادة تشغيل سكربت ؛ أيّ محرّك تختار لأيّ سؤال أعمال. المُقيَّم هو الحُكم — تسمية السّبب، واختيار الاستعلام أو الأمر المناسب — لا استظهار مفردات.
عند النّجاح، تُمنَح شهادة إتمامك فورًا؛ ورقمها قابل للتّحقّق من أيّ طرف على المنصّة.
استعِد قائمة التّحقّق أعلاه. لكلّ سطر، اسأل نفسك «هل أعرف كيف أكتب الاستعلام أو الأمر الّذي يتحقّق منه ؟». إن كنت تعرف كيف تُحرّر bool مع must وfilter، وdate_histogram، وقيد فرادة تليه LOAD CSV على دفعات، واستعلام توصية بالجوار، فأنت مستعدّ. حظًّا موفّقًا!
الامتحان النهائي
هل أنت مستعدّ لاعتماد هذه الدورة؟
40 سؤالًا تُختار عشوائيًّا من بنك أسئلة الدورة · حدّ النجاح 70 % · شهادة PDF قابلة للتحقّق تُصدَر فورًا عند النجاح.
ابدأ الامتحانيلزم تسجيل الدخول إلى حسابك في InSkillML مع اشتراك نشط. يمكنك أيضًا بدء الامتحان من دوراتي.