elastic-search הוא סוג של database
הוא שייך למשפחת ה noSQL שזה אומר שהוא שומר
את המידע בצורה שאינה מסודרת בטבלאות.
אפשר להגיד שהייעוד של elastic-search הוא לשמור במהירות
רבה כמות רבה מאוד של נתונים ולאפשר חיפוש מאוד מהיר בהם.
API
ישנם מספר דרכים
לעבוד עם elastic. הדרך הפשוטה והשכיחה היא ע"י שליחת הודעות ב .REST הדרך הבאה השכיחה
היא ע"י ספרייה שמספקת API לפעולות העיקריות. קיימת ספרייה לכל שפה עיקרית.
כאשר מחפשים
דוגמאות לפקודות בגוגל אז בדר"כ מוצאים את הפקודה המתאימה ב REST
דוגמא:
מסמך
כל
"רשומה" ב elastic נקראית "מסמך" והיא מכילה אוסף של שדות. אין מגבלה על השדות ולא צריך להגדיר מראש
איזה שדות יש בכל סוג רשומה. במובן הזה, כל מסמך יכול להראות אחרת מכל מסמך אחר
ואפשר להוסיף בחופשיות מסמכים שונים.
מעשית, בדר"כ נגדיר מראש את המבנה של
המסמכים השונים וכיצד יש לאנדקס כל סוג של מסמך (מה שנקרא "מיפוי" - mapping)
אינדקס
כאשר מכניסים
"מסמך" ל elastic יש לציין לאיזה "אינדקס" להכניס אותו. אפשר להתייחס ל "אינדקס" כאל
"סכימה" ב database רלציוני.
הפעולה של הכנסת מסמך לאינדקס נקראית
"אינדקוס". האינדקס של elastic הוא מה שמוכר כאינדקס של ספר לימוד - החלק בסוף הספר בו יש רשימה ארוכה
של מילים (מסודרים לפי האלף בית) ואז מספרי עמוד בו המילים מופיעות. אינדקס
כזה נקרא inverted index
מה ש elastic עושה כאשר מוכנס
מסמך הוא ניתוח של המסמך והוצאה ממנו של כל "המילים"בשפה שלו ואז הוספה שלהם
לאינדקס. כך החיפוש אח"כ נעשה כל כך מהר - פשוט מחפשים באינדקס את המילה
המתאימה ואז מגיעים מאוד מהר למסמכים הרלבנטים. אין צורך לעבור על המסמכים עצמם
בחיפוש.
דוגמא:
חיפוש
אח"כ אפשר
לחפש מסמכים באינקס נתון שעונים על תנאי מסויים. מה שיפה פה, שאפשר לציין תנאי
רגיל כמו בעולם של relational database ואז מסמך או עונה לתנאי או לא עונה לתנאי. תנאי
כזה נקרא "פילטר"
אפשר להגדיר תנאי "גמיש" ואז elastic יתן דירוג לכל מסמך שמתאר
את מידת ההתאמה שלו לתנאי. זה כבר מזכיר את החיפוש בגוגל שמציג קודם את הדפים שלהם
יש rank יותר גבוה בהתאמה לחיפוש. תנאי כזה נקרא "שאילתא" (query)
חשוב לציין כי כל instance של elastic יכול להכיל מספר
אינדקסים ולא רק אחד. זה מאוד דומה ל relational database שבו ייתכנו מספר סכימות ב instance יחיד.
סיכום
לסיכום חלק זה -
כדי לעבוד עם elastic צריך:
- להתקין אותו על מחשב או על מספר מחשבים (cluster) -
- להגדיר בו אינדקס אחד או יותר.
- להכניס לאינדקס את המסמכים (לאנדקס מסמכים)
- ואז אפשר אח"כ לחפש באינדקס את המסמכים. אפשר לחפש בצורה "מדוייקת" או בצורה "רכה" יותר כמו בגוגל.
Comments
שאלה: נאמר שיש לי מערכת של בלוג מבוססת mysql עם משתמשים, פוסטים ותגובות.
אני רוצה לארגן חיפוש חכם עם elasticsearch. האם אני צריך למעשה לשכפל את כל המאגר פעמיים ב-mysql ו-elasticsearch? אם כן מה עם סנכרון שלהם?
אכן, אתה צריך לשכפל את המידע ולהכניסו למאגר של elastic.
אפשר לעשות זאת בכל פעם שנכנס פוסט או תגובה חדשה.
אני לא מכיר כלי סנכרון פשוט שיתאים למה שאתה צריך אבל יכול להיו שיש כזה. אני לא עובד עם mysql.
בהצלחה,
זיו