انتقل إلى المحتوى الرئيسي

المراجعة والاختبار النّهائيّ

ستّ عشرة وحدة للانتقال من LIKE '%mot%' إلى محرّك بحث وتوصية كامل: تُفهرس Veille 200 853 مقالًا، وتجدها بالصّلة ورغم الأخطاء، وتُحلِّلها في Kibana، وتربط 23 082 مؤلّفًا بـ 41 فئة في Neo4j، وتُوصي بما يُقرأ بعده من سكربت Python. إليك الدّورة مضغوطة، والخيوط الّتي تعبرها، وقائمة تحقّق محرّك جاهز للعرض على عميل.

الدّورة في لمحة

الوحدةالجوهر الواجب حفظه
1. حقيبة Veilledoctor قبل 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 DSLmatch للنّصّ، وterm للدّقيق، وrange للتّواريخ؛ يجمع bool بين must وshould وfilter وmust_not ؛ لا يحسب سياق الفلتر درجةً ويُخزَّن مؤقّتًا.
6. التّجميعاتsize: 0 ؛ وterms وdate_histogram مع calendar_interval وcardinality وstats وtop_hits ؛ التّجميعات الفرعيّة تُجيب عن الأسئلة المتقاطعة (فئات بحسب السّنة).
7. KibanaData 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. مشروع Veillemapping مبرَّر، وخمسة استعلامات لكلّ 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 853 Article و41 Categorie و23 082 Auteur ؛ ويسرد 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 مع اشتراك نشط. يمكنك أيضًا بدء الامتحان من دوراتي.