Repository navigation
Claude/search index utility 5ekh4q - #3356
Conversation
`AdvancedSearchEngine.search` בנה את `SearchIndex` לפני שבדק איזה סוג חיפוש התבקש. רק `TEXT` ו-`FUNCTION` קוראים מהאינדקס; `CONTENT`, `REGEX` ו-`FUZZY` סורקים את ה-DB בעצמם ואינם נוגעים בו. מכיוון ש-`CONTENT` הוא ברירת המחדל של החיפוש ב-WebApp, המסלול הרגיל שילם על סריקה מלאה של כל קבצי המשתמש (כולל `code`, במנות של `SEARCH_PAGE_SIZE`, עם קיבוץ גרסאות מלא בכל עמוד) שאיש לא קרא את תוצאתה — ומיד אחריה סריקה מלאה שנייה לחיפוש עצמו. מה השתנה: - `get_index` נקרא רק בענפי `TEXT` ו-`FUNCTION`, דרך `_get_index_for_search` ששומרת על מדידת `search_index_get` הקיימת. - הפרמטר `index` הוסר מ-`_fuzzy_search`; הוא התקבל ומעולם לא נקרא, וזה מה שהסתיר את העובדה שהמסלול אינו נשען על האינדקס. - נוסף `SEARCH_MEMORY_INDEX_ENABLED` (ברירת מחדל `true`) לכיבוי מלא של האינדקס בזיכרון. כבוי ⇒ `TEXT` ו-`FUNCTION` מחזירים רשימה ריקה, ו- `_safe_search` ב-WebApp נופל לחיפוש `$text` במונגו. מה שנעלם: התאמה חלקית (prefix/substring) ו-`function_index`. התיעוד ב-`docs/workflows/search-flow.rst` עודכן בהתאם, כולל היחס בין האינדקס בזיכרון לאינדקס `search_text_idx` של מונגו. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RgnHZBJaH4VhdFFgwYZKLr
המשך ל-#3351, אחרי שהתברר שהסרת בניית האינדקס מחיפוש `content` גררה רגרסיה בהשלמה האוטומטית — ושהתצוגה שלה שבורה ממילא. מתג `SEARCH_MEMORY_INDEX_EAGER_BUILD` (ברירת מחדל `false`) ---------------------------------------------------------- `suggest_completions` קורא את האינדקס דרך `_get_ready_index`, שבמכוון אינו בונה אותו — ולכן ההשלמה נהנתה מאינדקס שחיפוש `content` בנה כתופעת לוואי. הרצת בקרה מול הקוד שלפני #3351, אותו קלט: לפני הצעות `['needle','needlehelper']`, אחרי `[]`. המתג מאפשר להחזיר את החימום מ-ENV, בלי דיפלוי קוד, כדי לשקול את העלות מול התועלת על נתונים אמיתיים. הוא כפוף ל-`SEARCH_MEMORY_INDEX_ENABLED`. תיקון זליגה באינדקס ב-`_text_search` ------------------------------------- `word_index.get(word, set())` מחזיר את הקבוצה השמורה עצמה, וה-`update` אחריו הזליג את התאמות ה-prefix לתוכה לצמיתות. מאותו רגע הן נספרו כהתאמות מדויקות וקיבלו 2.0 במקום 1.0, כלומר הדירוג נשחק בכל חיפוש נוסף על אותו אינדקס. תצוגת ההשלמה האוטומטית ----------------------- שלושה שורשים, כולם נמדדו ב-Chromium על ה-CSS של הריפו: - הוובאפ אינו טוען את ה-CSS של Bootstrap, ולכן `list-group-item` על כל הצעה לא עיצב דבר: ההצעות היו `<a>` עם `display:inline` וללא ריפוד, וחמש מהן נדחסו לשורה אחת בגובה 20 פיקסל. הוחלף במחלקה של הפרויקט, `search-suggestion`. - `overflow-x:hidden` על `.filters-row` גרם לדפדפן לחשב `overflow-y: auto`. השורה הפכה למיכל גלילה אנכי שחתך את הדרופדאון, ולכן הוא נראה רק בגלילה בתוך אזור צר שלא נועד לכך. הוחלף ב-`overflow-x: clip`, עם `hidden` כנפילה-לאחור. - הדרופדאון היה מעוגן לעמודה כולה ולא לתיבת הקלט. הועבר לתוך `.search-box-wrapper`, ועכשיו רוחבו וקצהו זהים לתיבה. בנוסף: `background:#fff` הקשיח הוחלף בטוקני `--solid-surface-*`. הם נמדדו על כל שבע ערכות הנושא — ניגודיות 17.7 בכולן, כולל `custom`, שבו `--bg-secondary` אינו מוגדר כלל והתיבה הייתה יוצאת שקופה. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RgnHZBJaH4VhdFFgwYZKLr
אחרי שההצעות קיבלו גובה אמיתי, התגלה שהרשימה נחתכת מאחורי הכרטיס הבא בעמוד. נמדד ב-Chromium: מתוך חמש הצעות, שתיים היו מכוסות על ידי תיבת החיפוש שבכרטיס שאחריו. השורש: ל-`.glass-card` יש `backdrop-filter: blur(20px)`, וזה יוצר stacking context. לכן `z-index:1000` של רשימת ההצעות כלוא בגבולות הכרטיס המארח, והכרטיס עצמו הוא `position:static; z-index:auto` — כלומר הכרטיס הבא ב-DOM נצבע מעליו, ושום z-index פנימי אינו יכול לגבור על כך. התיקון מרים את הכרטיס המארח עצמו (`position:relative; z-index:3`), כי זו הרמה שבה ההכרעה באמת מתקבלת. הערך נמוך בכוונה: מודאלים ותפריטים גלובליים יושבים ב-1000 ומעלה וממשיכים לגבור. אימות: 12 הצעות, שתי ערכות נושא, שני רוחבים — אפס פריטים מכוסים בכל השילובים. שתי מוטציות מוכיחות שהמדידה מסוגלת ליפול: הסרת ה-z-index מהכרטיס מחזירה כיסוי של עד ארבעה פריטים, והחזרת `overflow-x:hidden` לשורה מחזירה כיסוי של עד שבעה. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RgnHZBJaH4VhdFFgwYZKLr
…4q' into claude/search-index-utility-5ekh4q
|
ⓘ Qodo reviews are paused because your trial has ended. Ask your workspace admin to add credits to resume reviews. Manage billing |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
There was a problem hiding this comment.
Sorry @amirbiron, you've used your own review budget of 250,000 diff characters for the last 7 days.
You can request another review in 3 hours and 33 minutes by commenting @sourcery-ai review. Upgrade to get a review now.
|
Warning Review limit reachedNext included review available in 15 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (1)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🧯 Dangerous deletes guard reportPolicy: see .cursorrules — dangerous deletions are blocked unless wrapped safely. Summary:
Flagged findings (file:line:snippet): Excluded matches (by path pattern) |
Reviewer's GuideThe PR optimizes search by avoiding unnecessary in-memory index builds, adds configuration controls and regression coverage for index behavior and mutation, and redesigns WebApp autocomplete suggestions for correct positioning, theming, accessibility, and overflow handling. Sequence diagram for lazy search index buildingsequenceDiagram
participant Caller
participant SearchEngine
participant SearchIndex
participant MongoDB
Caller->>SearchEngine: search(user_id, query, search_type)
alt TEXT or FUNCTION
SearchEngine->>SearchIndex: _get_index_for_search(user_id)
alt index enabled
SearchIndex->>SearchIndex: get_index(user_id)
SearchIndex->>MongoDB: rebuild_index(user_id) when missing or stale
SearchIndex-->>SearchEngine: ready index
SearchEngine->>SearchIndex: _text_search or _function_search
else index disabled
SearchIndex-->>SearchEngine: empty SearchIndex
SearchEngine->>MongoDB: $text fallback for TEXT
end
else CONTENT, REGEX, or FUZZY
SearchEngine->>MongoDB: database search
end
SearchEngine-->>Caller: search results
Flow diagram for conditional search index usageflowchart TD
A[SearchIndex.search] --> B{SEARCH_MEMORY_INDEX_EAGER_BUILD}
B -- enabled --> C[_get_index_for_search]
B -- disabled --> D{Search type}
C --> D
D -- TEXT --> E[_text_search]
D -- FUNCTION --> F[_function_search]
D -- CONTENT --> G[_content_search]
D -- REGEX --> H[_regex_search]
D -- FUZZY --> I[_fuzzy_search]
E --> J{SEARCH_MEMORY_INDEX_ENABLED}
F --> J
J -- enabled --> K[SearchIndex.get_index]
J -- disabled --> L[MongoDB $text fallback]
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
⏱️ Performance report(No performance test durations collected. Mark tests with |
📖 Documentation PreviewThe documentation has been built successfully!
To view locally:
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
תבנית Pull Request
✨ תיאור קצר
📦 שינויים עיקריים
פירוט נקודות (רשימת תבליטים):
🧪 בדיקות
🧪 בדיקות נדרשות ב‑PR
📝 סוג שינוי
דוגמאות Conventional Commits
✅ צ'קליסט
services/register_jobs.py(כולל Callback/Trigger להפעלה ידנית — למשלcallback_name/trigger_funcלפי המבנה) כדי שיופיעו בדשבורדdocs/environment-variables.rstוגםservices/config_inspector_service.pydocs/webapp/theming_and_css.rst+FEATURE_SUGGESTIONS/theme_matrix.md______| המשפט: "______"🧩 השפעות/סיכונים
🔗 קישורים
🧯 סיכון / החזרה לאחור (Rollback)
Summary by Sourcery
Bug Fixes: