Skip to content
palmoni5 edited this page Nov 5, 2026 · 1 revision

חיפוש חכם — מימוש

החיפוש החכם הוא מסלול חיפוש לפי עניין, עם אפשרות לשלב התאמות מילוליות. הוא משתמש במודל מקומי ובנתוני וקטורים שהוכנו מראש לספרייה הרשמית. הוא אינו חלק ממצב SearchMode.fuzzy, ואינו מערכת שמייצרת תשובה במקום תוצאות.

למדריך שימוש, דרישות מערכת והסכמה ראה חיפוש חכם. דף זה מתאר את קוד הפיתוח.

חלוקת אחריות

רכיב אחריות
SemanticSearchRepository זמינות, הכנת הנתונים, התקנה, עדכון וקריאות למנוע
SemanticSearchBloc מצב הנתונים והפעולות שהממשק יכול להציע
SemanticResultsBloc חיפוש בכרטיסייה, עימוד, ביטול ותוצאות
SemanticResultsSource ממשק אחיד להבאת עמודי תוצאות והדגשות
EngineSemanticResultsSource המימוש המשתמש במנוע וב־session נפרד לכרטיסייה
OnnxSemanticEngineAdapter חיבור רכיב ONNX למנוע הסמנטי
SemanticReleaseLocator איתור גרסאות מודל ווקטורים והתאמתן לספרייה
SemanticStagedImport זיהוי והתקנה של נתונים שהועברו מראש למחשב
SearchFeedbackService הסכמה, תור מקומי ושליחת נתוני שימוש

זמינות אינה דגל יחיד

הממשק מבדיל בין פלטפורמה לא נתמכת, מנוע שלא נכלל בבנייה, הסכמה חסרה, נתונים שטרם הורדו, נתונים שטרם פורסמו לגרסת הספרייה, הורדה, התקנה, מוכנות וכשל.

מצב „מוכן” לבדו אינו עוקף את דרישת ההסכמה. פתיחת מסך התוצאות צריכה להשתמש בשער הזמינות המשותף, ולא להניח שהימצאות קובץ מודל מספיקה.

בדיקת הפלטפורמה תומכת ב־Windows/Linux מסוג x64 או ARM64 וב־macOS על Apple Silicon מגרסה 14. Android, iOS ו־Mac מסוג Intel אינם נתמכים במסלול זה. בנוסף נבדקת תמיכת המנוע שבבנייה.

בבניית דיבוג בלבד קיים DebugLexicalPreviewSource לתצוגת ממשק כשהמנוע או הנתונים חסרים. הוא מבוסס על חיפוש מילולי עם נתוני תצוגה מדומים. אין להציגו כהוכחה שחיפוש סמנטי אמיתי פעיל, ואין לתעד אותו כיכולת משתמש.

זהות המודל והנתונים

הנתונים צריכים להתאים לזהות המודל ולגרסת הספרייה. SemanticModelIdentity, תיאורי הגרסאות והנתיבים מפרידים בין קובצי מודל, קובצי וקטורים, מצב התקנה וקבצים זמניים.

המאתר בודק מטא־נתונים מפורסמים, גרסת יעד, זהות מודל וגיבובי SHA-256. קובץ שהורד אינו מותקן רק משום ששמו נראה מתאים. בדיקת שלמות והחלפה מבוקרת נדרשות גם בייבוא נתונים שהועברו למחשב מראש.

היעדר פרסום לגרסת ספרייה הוא מצב צפוי נפרד מכשל רשת. בנייה מחדש של אינדקס המילים אינה מייצרת את הווקטורים החסרים.

הורדה ועדכון מכבדים מצב לא מקוון והשהיית המשתמש. התקנה ממקור שכבר הועבר למחשב יכולה לפעול בלי הורדה. מחיקת הנתונים מסירה את נתוני המסלול ומפסיקה את עדכונם; היא אינה שקולה למחיקת הספרייה או האינדקס המילולי.

ביצוע חיפוש והיקף

SemanticQueryOptions כולל שאילתה, facets, בחירה בשילוב מילולי ואיחוד טקסטים זהים. מקור התוצאות בונה SemanticSearchRequest ומבקש hybrid או semanticOnly לפי הבחירה.

ההיקף מוגבל לספרים רשמיים שיש עבורם נתונים. מפתחות של ספרים אישיים ומסדים מצורפים אינם מוכנסים למסלול הווקטורים. יש לשמר את מסנני הממדים הנתמכים ולהציג שגיאה מועילה כשבקשת היקף אינה נתמכת.

לכל מקור תוצאות יש session משלו, כך שחיפוש בכרטיסייה אחת אינו מבטל חיפוש בכרטיסייה אחרת. ביטול או החלפת שאילתה מחייבים שלא להציג עמוד שהגיע מהחיפוש הקודם.

תוצאות, ספירות ונסיגה למסלול חלופי

תוצאה מכילה זהות מקור, קטע, מראה מקום ומידע על דרך ההתאמה. הממשק מבחין בין התאמה מילולית, התאמה לפי עניין והתאמה משולבת. זהות הספר צריכה להישמר עד הפתיחה בקורא.

התגובה כוללת גם מידע כגון:

  • האם יש עוד תוצאות.
  • האם הספירות מדויקות או מוגבלות.
  • האם חלון המועמדים או הרשימה נחתכו.
  • איזה מצב התבקש ואיזה מצב בוצע בפועל.
  • האם התבצעה נסיגה למסלול חלופי ומה סיבתה.

אין להציג נסיגה למילולי כאילו הופק דירוג סמנטי רגיל. SemanticFallbackLog ושדות התגובה מאפשרים לדווח ולבדוק זאת. כשל בטעינת עמוד המשך שונה מכשל בחיפוש הראשון ואינו צריך למחוק תוצאות שכבר הוצגו.

הדגשות קטעים הן פעולה נפרדת היכולה להיקרא עם ידית ביטול. זמני טעינה וספירות צריכים לשקף את הפעולה הרלוונטית, בלי להסיק שהדגשה חסרה פירושה שהספר לא נמצא.

הסכמה ונתוני שימוש

שם המצב ונוסח ההסכמה מרוכזים ב־semantic_search_strings.dart. ההסכמה כוללת שאילתות, תוצאות ודירוגן, פתיחת קטעים, משוב, זמן עיון ומידע על גרסת התוכנה והמערכת.

SearchFeedbackService מנהל תור מקומי, ניסיון שליחה, השהיה לאחר כשל ובדיקה שההסכמה עדיין תקפה לפני שליחה. מצב לא מקוון מונע שליחה, אך אינו מבטל את ההסכמה או מבטיח שלא ייאספו אירועים לתור.

ביטול הסכמה חוסם את המצב ומוחק אירועים שלא נשלחו. הסוואת כתובות דוא״ל ונתיבי קבצים בטקסט היא הגנה חלקית, ולא הבטחה לאנונימיות של כל שאילתה. אין לתעד את החיפוש כ„ללא שליחת נתונים” רק משום שהחישוב מתבצע מקומית.

נקודות חשובות לתחזוקה

  • שינוי נוסח ההסכמה צריך להתאים לגרסת ההסכמה השמורה.
  • שינוי זהות המודל מחייב טיפול בנתונים שכבר הותקנו.
  • החלפת ספרייה צריכה לרענן את התאמת הווקטורים.
  • שאילתה חדשה, ביטול וסגירת כרטיסייה צריכים לעצור עבודה שאינה רלוונטית עוד.
  • הנתיב המילולי, תצוגת הדיבוג והמנוע הסמנטי צריכים להישאר ניתנים להבחנה בבדיקות ובדיווח.

מקורות בקוד

חיפוש מילולי · אינדוקס · הגדרות

Clone this wiki locally