Skip to content
palmoni5 edited this page Jul 17, 2026 · 1 revision

אינדוקס החיפוש

lib/indexing/ — בניית אינדקס ה־tantivy שעליו רץ החיפוש. הליבה: repository/indexing_repository.dart.

זרימת האינדוקס המלא — indexAllBooks

  1. סדר אינדוקס — ‏orderBooksForIndexing: ספרי טקסט קודם, ‏PDF בסוף (חילוץ טקסט מ־PDF איטי פי ~10 — כך רוב הספרייה זמינה לחיפוש מוקדם).
  2. בדיקת תאימות מנוע (requiresManualReindex) ו־fast path אם הכל כבר מאונדקס.
  3. setBulkIndexing(true) — ללא מיזוגי סגמנטים תוך כדי; ‏optimize בסוף ממזג הכל.
  4. חימום מטמונים במקביל (דורות, ספרי יסוד, מטא־דטה של facets).
  5. Prefetch של PDF — חילוץ ה־PDF הבא רץ ברקע בזמן אינדוקס הספרים שלפניו (החילוץ היה 41% מזמן האינדוקס).
  6. ‏commit כל 100 ספרים; ‏optimize סופי.

זהות ספר באינדקס — טקסט לפי id‏, PDF לפי נתיב

buildIndexedBookFilePath(book):

  • PDF ← נתיב הקובץ המוחלט (נשבר בהעברת ספרייה — ראו תחזוקה למטה).
  • כל השארcatalogueOrderKey — מפתח id יציב: ‏id:<id> (רשמי) / uid:<id> (אישי) / ext:<id> (חיצוני). חשוב כי id מספרי חופף בין seforim.db ל־user_books.db.

מזהה מסמך: buildCatalogueDocumentId = ‏(catalogueOrder+1) << 32 + (ordinal+1).

אינדוקס טקסט מול PDF

  • טקסט_indexTextBook קורא bytes גולמיים מ־SQLite ומעבירם ל־addTextBookBytes בקריאת FFI אחת (בלי פענוח/קידוד חוזר — חיסכון ~180ms/MB).
  • PDF_indexPdfBook מחלץ עמודים בחלונות של 8 במקביל, בונה reference לכל עמוד (refFromPageNumber מה־outline), ושולח למנוע. אם אין טקסט — מנסה sidecar OCR (קובץ .txt נלווה מפוצל ב־\f); אם עדיין אין — נכתב marker של "ספר ריק" כדי שלא יעובד שוב.

תחזוקת האינדקס

  • _discardPartialBookWrites — ניקוי כתיבות חלקיות אחרי כשל.
  • dropOrphanedIndexEntries — הסרת ספרים יתומים (שמרני: רק uid: ונתיבי PDF שהקובץ שלהם נעלם).
  • reindexChangedBooks / reconcileIndexWithLibrary — השוואת טביעות אצבע (fingerprints) ואינדוקס מחדש רק של מה שהשתנה (טקסט בלבד — ל־PDF אין fingerprint).
  • dropRelocatedFileBookEntries — ניקוי אחרי העברת מיקום הספרייה.

IndexingBloc

מצבים: ‏Initial / InProgress / Complete / Error, עם _activeWorkId למניעת התנגשות בין עבודות ו־transformer‏ sequential(). ההחלטה מתי לאנדקס בעליית האפליקציה — ברצף האתחול (decideStartupIndexing).

דפים קשורים

Clone this wiki locally