משך: 2 שעות אקדמיות (90 דקות).

מטרת השיעור: הסטודנטים יריצו Elasticsearch ב-Docker ויתחברו אליו מקוד C# עם Fluent API.

בסוף השיעור הסטודנטים צריכים: להריץ Elasticsearch כקונטיינר, להוסיף מסמכים מ-C#, ולבנות שאילתה בסיסית עם Fluent API.

דגש קריטי: קשרו את הרצת הקונטיינר במפורש ליחידת Docker — זה אמור להיות “כבר מוכר”, לא נושא חדש.


מהלך השיעור

חלק בשיעורמשךהערות ודגשים
פתיחה וחיבור5 דקותהזכירו docker run על MongoDB/Kafka
הדגמה חיה: docker run Elasticsearch15 דקותמיפוי פורט 9200, בדיקה עם curl
הרעיון: C# Client15 דקותElasticsearchClient, IndexAsync
Fluent API לשאילתות30 דקותתרגום bool/must/filter לקוד C#
async/await10 דקותקישרו לכל תקשורת רשת שכבר נלמדה
תרגול מודרך15 דקותתרגיל 1+2

דגשים להעברת השיעור

  • ודאו שהקונטיינר עולה בהצלחה לפני תחילת השיעור בפועל — בעיות זיכרון/משאבים עם Elasticsearch ב-Docker נפוצות ועלולות לבלוע זמן שיעור יקר.
  • Fluent API מבלבל בהתחלה כי הוא “מתרגם” JSON מקונן למתודות מקוננות — עברו יחד, שורה-שורה, על התרגום מ-JSON (שכבר מוכר) לקוד C#.
  • הדגישו את Category.Suffix("keyword") כתזכורת ישירה לשיעור text/keyword — אותה מלכודת, הקשר חדש.

מושגים

Elasticsearch Container — הרצה כ-Docker Container. Elastic.Clients.Elasticsearch — ספריית .NET הרשמית. Fluent API — בניית שאילתות עם מתודות C# בטוחות-טיפוסים.


תרגיל חשיבה

שאלת פתיחה: “אם הייתם בונים שאילתת bool מורכבת (must+filter+must_not) כמחרוזת JSON ידנית בתוך קוד C#, מה היה הסיכון? מה Fluent API פותר?”

מהלך: הובילו לתובנה: מחרוזת JSON גולמית בתוך קוד C# (string concatenation) פגיעה לשגיאות הקלדה (סוגריים לא מאוזנים, שם שדה שגוי) שנתפסות רק בזמן ריצה, אם בכלל. Fluent API מעביר את אותה בדיקה לזמן קומפילציה — בדיוק העיקרון שחזר שוב ושוב מתחילת הקורס (Static Typing, DataAnnotations, Generics).

מה המרצה מראה בסוף: הריצו שאילתה עם שגיאת הקלדה מכוונת בשם שדה — פעם כ-JSON גולמי (string) שנכשל רק בזמן ריצה עם שגיאה לא-ברורה, ופעם עם Fluent API שבו שם שדה שגוי כלל לא מתקמפל (כי הוא property של המחלקה) — ניגוד ישיר שממחיש את היתרון.