# מערך שיעור: שאילתות match, term, range, bool📋 מערך מרצה

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

מטרת השיעור: הסטודנטים ישלטו בשאילתות הבסיסיות וישלבו אותן עם bool.

בסוף השיעור הסטודנטים צריכים: לכתוב match/term/range נפרדים, לשלב אותם עם bool, ולהסביר את ההבדל בין must ל-filter.

דגש קריטי: ההבדל must/filter (השפעה על דירוג מול לא) הוא הנקודה העדינה ביותר בשיעור — תנו לה זמן נפרד.

---

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

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | חזרה קצרה על match/term מהשיעורים הקודמים |
| range | 15 דקות | טווחים מספריים ותאריכים |
| הרעיון: bool | 20 דקות | must/should/must_not — קישרו ל-&/| מ-Pandas |
| must מול filter | 20 דקות | הבדל בדירוג וביצועים |
| הדגמה חיה: שאילתה משולבת מלאה | 20 דקות | כל הרכיבים יחד |
| תרגול מודרך | 10 דקות | תרגיל 1+2 |

---

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

- קישרו bool ל-&/| מיחידת Pandas ול-Where מורכב ב-LINQ — זה עוזר לסטודנטים לזהות שהם כבר מכירים את הלוגיקה, רק לומדים תחביר שלישי.
- must מול filter דורש הסבר מפורש עם דוגמה — "שם המוצר תואם" משפיע על כמה התוצאה רלוונטית (must); "מחיר עד 500" הוא רק כן/לא (filter).
- הדגמה חיה של שאילתה משולבת מלאה (עם must+filter+must_not יחד) חשובה כי זה מה שסטודנטים יצטרכו לכתוב בפרויקט המסכם.

---

## מושגים

**`match`** — חיפוש חכם על text.
**`term`** — התאמה מדויקת על keyword.
**`range`** — סינון לפי טווח.
**`bool`** — שילוב תנאים: must/should/must_not/filter.

---

## תרגיל חשיבה

**שאלת פתיחה:** "אתם מחפשים מוצרים עם 'נעליים' בשם, אבל רק בטווח מחיר מסוים. למה תשימו את חיפוש השם ב-must ואת טווח המחיר ב-filter, ולא שניהם באותו מקום?"

**מהלך:** הובילו לתובנה: "נעליים" בשם הוא תנאי שיכול להיות **יותר או פחות** רלוונטי (מוצר עם "נעליים" פעמיים בשם רלוונטי יותר מאחד עם פעם אחת) — שייך ל-must, משפיע על הדירוג. טווח מחיר הוא בינארי לגמרי — או שהמוצר בטווח או שלא, אין "יותר או פחות" — שייך ל-filter, וגם מהיר יותר כי Elasticsearch יכול לשמור אותו ב-cache.

**מה המרצה מראה בסוף:** הריצו את אותה שאילתה פעמיים — פעם עם טווח המחיר ב-`must` ופעם ב-`filter` — אם אפשר, השוו את ה-Relevance Score (`_score`) של התוצאות בין השתי הגרסאות, כדי להראות שהמיקום (must/filter) משפיע בפועל על הניקוד, לא רק על התוצאה הבינארית.
