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

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


טיפים לטסט על אמבולנס במד"א

אורך הטסט הוא בערך 20-30 דקות בהם הטסטר נותן הוראות ימינה ושמאלה ולפעמים קצת יותר. נראה שהטסטר מחפש להבין שאתה לא נהג חסר אחריות.
הרכב עצמו הוא אוטומט. מוט ההילוכים הוא בהגה ודרכו אפשר לעבור בין המצבים (Drive, Reverse etc).
ההמברקס הוא דוושת הרגל השמאלית.
טיפיםהעצות בלשון זכר רק לצורך פשטות.
בתחילת הנסיעה:
אם אתה הראשון, תדליק אורות דרך.

בדוק איך מעבירים את ההילוך ל 3 בלי להסתכל בידית ההילוכים כי הטסטר עלול לבקש במהלך הנסיעה שתעביר להילוך שלישי.

בדוק איך להשתמש בדוושת בלם היד (שמאלית) כי ייתכן שהטסטר ישלוף לך את המפתח באמצע הנסיעה ויבקש ממך לבלום את האמבולנס באמצעות "פימפום" על דוושת הבלם יד תוך כדי שידית השחרור שלו משוכה אחורה כדי שלא ינעל הבלם
בנסיעה: סע לאט, אבל בטוח. 
ציית לתמרורים,

לא לשכוח לאותת,
שמור מרחק, 
אל תקפוץ על פסי האטה, 
אל תעלה על מדרכה ואם זה קורה בפנייה אז קח אחורה ורד מהמדרכה (המדרכה היא רק להולכי הרגל),
סע בצד ימין ולא באמצע הכביש,
תדע להגיד כמה מותר לנסוע בכל כביש שאתה נמצא בו,
כאשר נמצאים ברחוב שנכנס לרחוב חד סטרי אז צריך לדעת לאיזה צד לפנות בתוך הרחוב …

gnutls_handshake() failed: Access was denied

Error when running apt-get:

sudo apt-get update && sudo apt-get install yarn

gnutls_handshake() failed: Access was denied

The problem: There is proxy configuration error of apt-get

The fix:Define proxy for apt-get
1. sudo vim /etc/apt/apt.conf 2. Add line: Acquire::http::proxy "http://web-proxy.il.hpecorp.net:8080";
Source: https://ubuntuforums.org/showthread.php?t=2011511