![]() |
|
![]() |
||
|
||||
![]() |
הבנתי. הייתי מצפה שיהיו דברים כאלה מן המוכן עבור בסיס הנתונים שאתה משתמש בו, אבל אולי לייבא ולתפור אותם יותר מעיק מלכתוב אותם לבד. | ![]() |
![]() |
![]() |
![]() |
|
![]() |
||
|
||||
![]() |
הגרסה הנוכחית של MySQL (להבדיל מזו שהשתמשתי בה כשנכתבה התוכנה במקור, בשלהי האלף הקודם) אכן כוללת full-text search, אבל (א) הוא אינו חוסך את נפח הדיסק הנדרש, ו-(ב) הוא אינו הולם את לצרכינו (חיפוש "שרת" לא יעלה תגובה שמופיעה בה המלה "השרת", למשל, שלא לדבר על "ולכשהשרת"). | ![]() |
![]() |
![]() |
![]() |
|
![]() |
||
|
||||
![]() |
(''את צרכינו'', כמובן, ולא כפי שקשקשתי). | ![]() |
![]() |
![]() |
![]() |
|
![]() |
||
|
||||
![]() |
והוא לא תומך בחיפוש 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 כמה חודשים, בעיקר משום שלא הקדשתי לו את כל זמני, כמובן. |
![]() |
![]() |
![]() |
![]() |
|
![]() |
||
|
||||
![]() |
...ואגב, טל, אני חושד שמאמר מפרי-עטך שיתאר את המבנה הבסיסי של המנוע של המוס, ובמיוחד את הבעיות המיוחדות של התמודדות עם עברית ועם הסביבה החברתית הייחודית של האייל, ובצירוף כמה אנקדוטות, ייקרא בשקיקה על ידי לא מעט איילים. ואם המאמר גם יכתב בשפה לא-טכנית ושווה לכל נפש, הוא יוכל להציג בפני כל האיילים את העולם המופלא של טכנולוגית הWeb בכלל. | ![]() |
![]() |
![]() |
![]() |
|
![]() |
||
|
||||
![]() |
העורך הראשי לא מרשה לי! (ז'תומרת, ענייני אינטרנט הם בהגדרה ה-off-topic היחיד של האתר). ואם להיות קצת יותר רציני, הצגתי חלק קטן מהבעיות הללו בהרצאה שהעברתי פעם כמרצה אורח בקורס הנדסת תוכנה בטכניון. אני לא בטוח שיש לי את הכוח הנפשי לכתוב מאמר בנדון; אולי פעם. | ![]() |
![]() |
![]() |
חזרה לעמוד הראשי | המאמר המלא |
מערכת האייל הקורא אינה אחראית לתוכן תגובות שנכתבו בידי קוראים | |
![]() |
© כל הזכויות שמורות |