# מערך שיעור: קונטיינר ו-C# Client📋 מערך מרצה

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

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

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

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

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | הזכירו docker run על MongoDB/Kafka |
| הדגמה חיה: docker run Elasticsearch | 15 דקות | מיפוי פורט 9200, בדיקה עם curl |
| הרעיון: C# Client | 15 דקות | ElasticsearchClient, IndexAsync |
| Fluent API לשאילתות | 30 דקות | תרגום bool/must/filter לקוד C# |
| async/await | 10 דקות | קישרו לכל תקשורת רשת שכבר נלמדה |
| תרגול מודרך | 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 של המחלקה) — ניגוד ישיר שממחיש את היתרון.
