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

Yair said…
תודה על המאמר.

שאלה: נאמר שיש לי מערכת של בלוג מבוססת mysql עם משתמשים, פוסטים ותגובות.

אני רוצה לארגן חיפוש חכם עם elasticsearch. האם אני צריך למעשה לשכפל את כל המאגר פעמיים ב-mysql ו-elasticsearch? אם כן מה עם סנכרון שלהם?
Ziv said…
שלום יאיר,

אכן, אתה צריך לשכפל את המידע ולהכניסו למאגר של elastic.

אפשר לעשות זאת בכל פעם שנכנס פוסט או תגובה חדשה.

אני לא מכיר כלי סנכרון פשוט שיתאים למה שאתה צריך אבל יכול להיו שיש כזה. אני לא עובד עם mysql.

בהצלחה,
זיו

Popular posts from this blog

Best freeware - XML editor

As a software developer, I open XML files all the time. I a heavy commercial XML editor. But nothing can compare to a small, thin and free XML editor like 'foxe'. A great feature is has is the alignment of long XML strings to readable XML format (Shift-F8). It help lot of times when the XML file was generated by some tool and was not readable. Homepage: http://www.firstobject.com/dn_editor.htm

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')