Skip to main content

elasticsearch for dummies (hebrew) - part 1


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

Popular posts from this blog

Jenkins error: groovy.lang.MissingPropertyException

I tried to run groovy build step and got below error. This post will describe how I solved the problem.

Caught: groovy.lang.MissingPropertyException: No such property: hudson for class: script


SSL in pictures

Here is my summary on SSL (or as I like to call it 'SSL for dummies')