מן הסתם אף אחד לא יודע בדיוק איך גוגל עובד, כי זה אחד הסודות העסקיים הכי גדולים שיש. מדי פעם גוגל מדליפים מידע על איך החוות שרתים שלהם נראית וקצת על המערכות שמשתמשים בהם. גוגל בנו נניח דאטהבייס שנקרא BigTable מסוג Key-Value שהם נעזרים בו אבל הוא שלהם ולא נראה לי שהוא יצא לשוק.בכל מקרה, יש המון מחקרים בנושא של מסדי נתונים ואני מניח שחלק מהמחקרים הם של גוגל עצמה ובחלק מהמחקרים גוגל עשו שימוש. אחת הפיתוחים הכי גדולים של גוגל היה אלגוריתם PageRank שהם רשמו עליו פטנט, שהוא בעצם השיטה שמדרגת תוצאות, אבל בשביל זה צריך להבין קודם איך דברים עובדים.
המטרה של מנוע חיפוש היא להחזיר תוצאות בהנתן שאילתא של יוזר. ניתן להבין שאם ברגע נתון היוזר ישלח שאילתא, אין לשרתים זמן להתחיל לחפש את המידע שלו באינטרנט אז הוא היה צריך להיות שמור מראש אצל השרת.
בשביל זה משתמשים במנוע חיפוש ברכיבים הבאים:
Crawler - רץ כל הזמן ברקע. המטרה שלו היא להגיע לכמה שיותר דפים באינטרנט. בגדול מה שהוא עושה זה להתחיל הילוך אקראי על כמה אתרים ולהתקדם מהם לפי הלינקים שיש מהם (ואז מהם להתקדם לפי הלינקים וכו'). ברגע שהקרוולר מגיע לאתרים, הוא מעביר אותם לIndexer שהמטרה שלו לשמור אותם.
גוגל קוראים לCrawler שלהם גוגלבוט http://en.wikipedia.org/wiki/Googlebot
Indexer - מקבל דפים מהCrawler ודואג לשמור אותם בIndex Repository
Index Repository- המטרה שלו היא לשמור דפים בצורה יעילה יעילה ככה שבהמשך תוכל להפעיל שאילתות ולהגיע אליהם מאוד מהר. בחומר הזה לדעתי יש הכי הרבה רקע תיאורטי והוא דורש ידע בדאטהבייסים וקידודים למיניהם כדי לבצע אותו בצורה יעילה.
הרעיון זה שאתה צריך לייצג איכשהו כל מילת חיפוש פוטנציאלית שמופיעה במסמכים ואת המסמכים שקשורים אליה באופן הכי מצומצם שתוכל מבחינת מקום אכסון (שלא יתפוס יותר מדי), ומצד שני באופן כזה שתוכל להפעיל שאילתא ובקלות להשיג מסמכים שהמילים מופיעות בהן. לעיתים גם מדובר בשאילתות Wildcard וזה דבר שדורש ממך סוג שונה של אחסון (נסה לחפש בגוגל Bigrams)
Query Processor - בהנתן שאילתא של היוזר, תרצה להוציא ממנה רק את החלקים הרלוונטים והיחודיים לה. המילה The מופיעה כמעט בכל מסמך אז מן הסתם היא תעניין אותך פחות, וככה יש רשימה של Stop Words בד"כ שהן המילים הנפוצות באנגלית ותעדיף למחוק אותן מהשאילתא (כי זה סתם יגדיל לך את זמן החיפוש).
עוד דברים שלפעמים עושים הם Stemming שזה להוריד את המילה לשורש הבסיסי שלה. נניח Running -> Run (ואז גם עושים את זה במבנה נתונים של האינדקס)
Ranker - החלק שהוא בעצם ה"קרם דה לה קרם" של מנוע חיפוש. על כל שאילתא יש לך המון מידע, והמטרה שלך היא להציג בראש התוצאות את התוצאות הרלוונטיות ביותר. אז איך עושים את זה ? בגדול יש לך אלגוריתמים מסוג שנקרא TF-IDF שהוא מקבל שאילתא ורשימת מסמכים ובודק התאמה של השאילתא למסמכים http://en.wikipedia.org/wiki/Tf%E2%80%93idf ויש לך כמובן את מה שגוגל פיתחו שנקרא PageRank http://en.wikipedia.org/wiki/PageRank שהמטרה שלו היא להגיד שאתר נמדד לא בהכרח לפי ההתאמה שלו לשאילתא מסויימת, אלא לכל אתר יש משקל ואם מילים של שאילתא מופיעות באתר עם משקל גבוה, אז כנראה שהוא מתאים לשאילתא. המשקל עצמו נקבע בעיקר לפי הלינקים הנכנסים לאתר ונעשה שימוש במטריצות מעבר מאתר כלשהו וההסתברות לעבור לאתר אחר וככה בסוף פיתחו נוסחה שתקבע מעבר מאתר לאתר. הייתה בזה בעייתיות כי לפעמים האתרים לא יוצאים קשורים לתחום שאתה מחפש בכלל. בשביל זה פיתחו אלגוריתםשנקרא Hilltop http://en.wikipedia.org/wiki/Hilltop_algorithm שאומרים שגוגל עושים בו שימוש, שהוא מתנהג בדומה לפייג'ראנק רק שהוא נותן ציונים לאתרים ודואג למדוד לפי הלינקים הנכנסים הקשורים לתחום (נניח אתר יהיה נחשב מדורג גבוה בתחום כלשהו, אם אתר שהוזן מראש ע"י המפתחים כאתר משמעותי בתחום הזה מקשר אליו)
בגדול זה הרכיבים שיש לך.. אם יש לך שאלה על רכיבים ספציפיים אז אני אוכל אולי להפנות אותך לחומר.
