|
||||
|
||||
(''את צרכינו'', כמובן, ולא כפי שקשקשתי). |
|
||||
|
||||
והוא לא תומך בחיפוש regexp? לא שאני מציע שהאיילים ישימו כוכביות, רק שהמנוע יצמיד כוכביות למילים (אלא אם המחפש מבקש במפורש "מלים שלמות"). למה אני שואל? כי לתומי הנחתי שלמתכנת בשנת 2004 יהיו כבר מן המוכן כל הכלים הדרושים לתחזוקת אתרים ובסיסי-נתונים, ובפרט חיפושים מתוחכמים ויעילים בזמן ובזכרון. התקדמנו הרבה מאז ימי dBase וטורבו-פסקל 3, ובכל זאת על המתכנת היקר להוגיע את מוחו ולכתוב לעצמו את אלגוריתמיו. משהו לא עובד כמו שצריך. |
|
||||
|
||||
לא, הוא לא תומך ב-regexp. למעשה, קשה לחשוב על מבנה נתונים לאינדקס שיאיץ שאילתות על regexpים שרירותיים. |
|
||||
|
||||
הגזמתי, לא שרירותיים. סתם substrings. |
|
||||
|
||||
למרבה הצער, ה-full text search של MySQL תומך בחיפוש עפ"י קידומת אבל לא עפ"י סיומת או תת-מחזורת שרירותית. ולמעשה, הוא לא זמין בכלל אם משתמשים ב-transactions (דהיינו ב-InnoDB). |
|
||||
|
||||
בצחוק, אבל אני באמת מופתע. חתיכת תוכנה מורכבת ואף פופלרית היא MySQL, לא? ואי-אפשר לחפש תת-מלה? |
|
||||
|
||||
אפשר, אבל לא ביעילות -- כלומר, אין אף סוג אינדקס רלוונטי. |
|
||||
|
||||
אז אולי אפשר להוסיף שדה נסתר לכל תגובה וסיפור שיכלול את כל הסיומות האפשריות של כל אחת מהמלים בטקסט, ואז להריץ full text search עפ"י קידומת. זה יכפיל את נפח האחסון של האייל פי n, כש-n הוא אורך המלה הממוצעת (לא ביג דיל, חוץ מתגובות של אלכסנדר מאן). |
|
||||
|
||||
יותר פשוט לממש מנגנון FTS משלנו (וזה כנראה מה שנעשה, בסופו של דבר); אלא שכרגע אין לנו את נפח הדיסק הדרוש. |
|
||||
|
||||
לפני שכותבים משהו מאפס - כדאי אולי להעיף מבט כאן: http://jakarta.apache.org/lucene/docs/index.html ( או כאן: http://sourceforge.net/projects/clucene/ ) (זה בהנחה שאפשר לגשר על הפער בין השפה שבה כתובה תוכנת האייל (PHP?) לבין אחת מהאופציות הנ"ל). Lucene אינו רק פרויקט קוד פתוח, אלא כתוב גם בארכיטקטורה פתוחה המאפשרת לכתוב "analyzer"-ים של טקסט - למשל לעברית. (למען ההגינות צריך לציין שהעניין איננו פשוט כל כך - משום שהמערכת כפי שהיא אינה מאפשרת לאנדקס מילה ביותר מאופן אחד: "מספר" חייבת להישמר או כ "מספר" או כ"ספר" - האופציה הראשונה תיכשל כשמלת החיפוש תהיה "ספר", והשניה, כשמילת החיפוש תהיה "המספר"). ואם אתה כבר יודע את כל זה - סליחה על הטרחה. |
|
||||
|
||||
תודה על ההפניות, אך כתיבת מנגנון החיפוש לא נראית לי כאתגר גדול במיוחד -- והטורח בתרגום משפה אחרת יהיה ודאי גדול יותר. השיקולים הייחודיים לאייל (עברית, מיקום הטקסט -- מאמר או תגובה, גוף הטקסט או כותרת, וכו') יהפכו את מאמץ ההמרה למורכב עוד יותר, שלא לצורך. |
|
||||
|
||||
הממם... אני קיוויתי שתוכל להעזר ב-Lucine באחת השפות שהוא כבר כתוב בהן (כשאמרתי "לגשר" חשבתי על רכיבים שכתובים בשפות שונות ומדברים בינהם - לא על port). לגבי חיפוש בשדות שונים (מאמר, תגובה וכו') - זה לא ייחודי כל כך, ו-Lucene תומך בכך בקלות (ללא עבודה נוספת). אני קצת מופתע מכך שכתיבת מנגנון חיפוש (יעיל) לא נראית לך כאתגר גדול במיוחד (על Lucene עבדו, נדמה לי, לא מעט אנשים במשך זמן לא קצר). אני אשמח אם תצליח במשימה ותוכיח לי שהספקנות שלי איננה במקומה. |
|
||||
|
||||
לכשאתפנה לטפל במשימה זו, אבחן את Lucene בקפידה לפני שאתחיל. השבוע סיימתי מאמץ שנמשך כמה חודשים1 - שדרוג מלא של "אזור המערכת" של האייל; שינוי מהותי ומשמעותי שאף משתמש, מלבד העורכים (ואולי חלק מכותבי המאמרים) לא ירגיש בו. המשימות הבאות גם הן "מאחורי הקלעים", כמו למשל ניצול יכולות הטרנזקציה החדשות (יחסית) של MySQL. ----- 1 כמה חודשים, בעיקר משום שלא הקדשתי לו את כל זמני, כמובן. |
חזרה לעמוד הראשי | המאמר המלא |
מערכת האייל הקורא אינה אחראית לתוכן תגובות שנכתבו בידי קוראים | |
RSS מאמרים | כתבו למערכת | אודות האתר | טרם התעדכנת | ארכיון | חיפוש | עזרה | תנאי שימוש | © כל הזכויות שמורות |