מה זה Elasticsearch ואיך הוא יכול לשפר אתרי וורדפרס?

ברק ארזואן,

לאחרונה יצא לנו לעסוק לא מעט בהתקנות של מוצר מהפכני בשם Elasticsearch, מוצר זה היום נשמע כמוצר אנונימי לגמרי עבור רוב משתמשי הקהילה הישראלית אבל בגלל היכולות המעולות שלו חשבנו שכדאי לכתוב עליו מאמר נפרד ובכך להגדיל את השימוש בו.

במאמר הבא אני אציג את היתרונות והחסרונות שבשימוש Elasticsearch לעומת שימוש בחיפוש סטנדרטי של וורדפרס.
אסביר איך מתבצע תהליך ההתקנה של שרת Elasticsearch וכיצד ניתן להגדיר בקלות את ההתממשקות למערכת וורדפרס.

Elasticsearch

מה זה בכלל Elasticsearch?

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

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

Elasticsearch הוא המרכזי והפופולרי מבין כלי האנליזה וניתוח הנתונים של חברת Elastic, אליו נלווים כלי הLogstach והKibana לניתוח לוגים ונתונים, ויזואליזציית נתונים על גבי גרפים.
בעולם מכנים את השילוב של שלושת הכלים האלו כ-ELK (ובעברית – מחסנית אלסטית):

  • Elasticsearch
  • Logstatch
  • Kibana

מתי מומלץ להשתמש בElasticsearch?

אז מתי בעצם השימוש בElasticsearch נעשה משתלם ומומלץ? ברמת העיקרון השימוש מומלץ עבור אתרים מרובי תכנים, כגון: אתרי חדשות ובלוגים בעלי מספר של מעל 5K פוסטים, או לחילופין באתרי סחר מקוון (אתרי Ecommerce) או מערכות Web מותאמות אישית, המכילים לפחות 2K מוצרים \ המון נתונים סינון (קטגוריות, תגיות מכל סוג).

באתרים מהסוג הנ”ל חיפוש בצורה רגילה במערכת הוורדפרס או בכל מערכת אחרת שעל גביה הם מבוססים עשוי להתארך ובממוצע לוקח מספר שניות (שזה המון במונחי זמן ריצה של שאילתא למסד הנתונים) כדי להחזיר תשובה עבור שאילתת חיפוש סטנדרטית על פי שם.
למשל בוורדפרס, החיפוש מבוצע על ידי שאילתת Select במסד הנתונים Mysql. לצורך ההדגמה למאמר זה הקמנו אצלנו בuPress אתר וורדפרס המכיל 100K פוסטים עם תוכן משתנה, שאילתת חיפוש סטנדרטית (על פי string) באתר וורדפרס ארכה למעלה מ6.5 שניות.

בElasticsearch לעומת זאת, שאילתא כזו מוגדרת כפשוטה ביותר, התשובה תחזור בפחות מ0.5 שניות ואפילו הרבה יותר מהר במקרים מסויימים.
זוהי הסיבה שהמון בעלי אתרים מרובי תוכן ופופולריים החליטו ליישם את השימוש במנוע החיפוש זה, היתרון הגדול הוא שהמנוע הזה קל להטמעה, ומספק תוצאות מדהימות.

סקירת ביצועים – Elasticsearch מול חיפוש סטנדרטי בוורדפרס

לטובת מאמר זה הקמנו אצלנו בuPress אתר וורדפרס, הכנסנו לתוכו כ-100,000 פוסטים עם תוכן משתנה (מילים שונות על ידי תוצאות שונות ברשת), כמובן שכל המידע מאוחסן כפוסטים במסד נתונים ששוקל 680MB.

elasticsearch
מספר פוסטים במסד נתונים


לצורך ביצוע השוואה של ביצועי השאילתות השתמשנו בתוסף וורדפרס בשם Query Monitor.

השאילתה הראשונה היא שאילתת חיפוש במנוע החיפוש הסטנדרטי של וורדפרס, שאילתא של חיפוש על פי string (ביטוי), 2 מילים:

elasticsearch
wordpress standard search query
6.4038 שניות עבור פלט של תוצאת חיפוש
elasticsearch
7.18 שניות זמן טעינה מלא של הדפדפן כולל תבנית העיצוב והתוספים, ללא תוסף מטמון.

השאילתא הבאה היא שאילתת חיפוש זהה במנוע החיפוש Elasticsearch (בשרת חיצוני), לכן השאילתא לא מוגדרת כ Query אלא כבקשת Http לשרת חיצוני.
גם במקרה הזו מדובר בשאילתת חיפוש על פי string (ביטוי), 2 מילים:

elasticsearch
0.2559 שניות עבור פלט של תוצאת חיפוש
elasticsearch
1.16 שניות זמן טעינה מלא של הדפדפן כולל תבנית העיצוב והתוספים, ללא תוסף מטמון.

אם נבצע השוואה בין 2 המקרים באחוזים – מדובר בהבדל של 618%.
כמובן שאם נכניס לחישוב עוד מגוון פרמטרים נוספים של חיפוש (סינון על פי תאריכים, סינון על פי סוגי פוסטים, סינון על פי גודל \ צבע \ משקל, סינון על פי מחבר) אנחנו נראה תוצאות שונות ומגוונות שונות מהתוצאה הנוכחית.

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

איך מתקינים Elasticsearch?

למען האמת, עד היום התקנה של Elasticsearch הייתה דורשת ידע טכני נרחב והכרה של עולם ה Linux.

לטובת ביצוע הפעולה עבור המאמר הנוכחי ביצעתי התקנת ElasticSearch על גבי שרת המכיל את פאנל הניהול Booting.

פאנל הניהול Booting הוא ממשק ניהול מהפכני המיועד לניהול שרתים ללא ידע טכני, הממשק פותח על ידי קבוצתנו במהלך השנה האחרונה והוא מציע אפשרויות מגוונות למשתמש וחווית משתמש יוצאת דופן שטרם נראתה כמותה לניהול כל אתר או מערכת אינטרנט באשר היא.

Booting הוא המילה האחרונה בתחום ניהול שרתים לאתרי אינטרנט ואפליקציות ענן מורכבות, והשקענו בפיתוחו את מיטב הידע והניסיון שצברנו בתחום במשך שנים. קיבצנו בתוכו מגוון רחב של פיצ’רים ייחודיים שלא ניתן למצוא בממשקי הניהול הפופולריים האחרים – יחד עם האפשרויות המוכרות של ממשקי הניהול של שרתי אינטרנט, ובך יצרנו מוצר מושלם לניהול ותחזוקה של אתרי אינטרנט אותו אפשר להתקין על כל שרת בכל מקום שתבחרו, ללא ידע טכני נרחב בניהול שרתים, וכל זאת בצורה פשוטה וידידותית.

תהליך ההתקנה

ההתקנה מחולקת ל-2 שלבים, שלב ראשון מבוצע ברמת מנוע החיפוש Elasticsearch, השלב השני מבוצע ברמת אתר הוורדפרס שלנו (על ידי תוסף).

ברמת מנוע החיפוש

בשלב הראשון, נתחבר לBooting עם משתמש המכיל הרשאות לאיזור הServices בשרת.
בתפריט בצד שמאל נלחץ על Services, ולאחר מכן על Add New Service.

כעת, תפתח לפנינו רשימת שירותים נרחבת שנוכל להתקין לשרת שלנו בקליק אחד.
נבחר כמובן בElasticsearch ונלחץ על Install.

elasticsearch
elasticsearch
Elasticsearch Booting

בשלב השני, נבצע הגדרה של שירות הElasticsearch עצמו על ידי כניסה בתפריט צד ל-General Settings ואז ל-Extensions Settings.

תחת ההגדרה Discovery נבחר Public And Local (על מנת שנוכל לאנדקס נתונים משרת חיצוני לאלסטיקסרץ’ שלנו) ונלחץ על כפתור Update Settings כמובן.

מכיוון שהשרת Booting שלנו משמש כשרת מרוחק (יש אתר וורדפרס עליו נמצאים קבצי האתר ומסד הנתונים ושרת הבוטינג שיצרתי הוא שרת בפני עצמו) , כדי שהשרתים יוכלו לתקשר בינהם נבצע פתיחה של פורט 9200 (הפורט ש Elasticsearch עובד איתו כברירת מחדל) בחומת האש של שרת השרת Booting שלנו.

באמצעות כניסה ללשונית Firewall ולאחר מכן לחיצה על כפתור Add New Port, במסך (למטה בצד ימין), נוסיף את פורט 9200 לאחר מכן נלחץ על Add, ונאשר את התקשורת ל UDP_IN. (נאשר לשרת לקבל בקשות משרתים אחרים בפורט 9200).

elasticsearch
כך זה אמור להיראות לאחר ההגדרה

ברמת אתר הוורדפרס

ישנם מספר תוספי וורדפרס אשר יסייעו לנו בהתממשקות מול השרת Elasticsearch שלנו, התוסף שבחרנו לעבוד איתו הוא תוסף שנמצא בספריית התוספים הרשמית של וורדפרס, התוסף נקרא ElasticPress.

לאחר ההתקנה של התוסף על אתר הוורדפרס יש להיכנס להגדרות (תפריט חדש שנוצר בשם ElasticPress), ולגשת ללשונית Third-Party/Self-Hosted.

elasticsearch
elasticpress settings

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

ברגע שיתחיל תהליך הסנכרון לשרת המשמש כמנוע חיפוש זה יראה כך:

elasticsearch
elasticpress sync

כמו כן, בשרת Booting בעמוד הגדרות של Elasticsearch ניתן לראות את המידע שיושב במנוע החיפוש במקום היעודי (כך תדעו שמבוצע חיבור תקין בין 2 השרתים):

booting elasticsearch stats

לסיכום

אני מקווה שהצלחתי לעשות סדר בנושא של Elasticseach ולפשט את תהליך ההתקנה ככל שניתן, אם אתם נמצאים בנקודה שבה אתם רוצים לשפר את מהירות האתר שלכם מבחינת שאילתות החיפוש \ פילטור – המאמר הזה פותח לכם דלת לשימוש בטכנולוגיה חדשה ועוצמתית שתשפר את מהירות החיפוש באתר שלכם במאות אחוזים !

אני מקווה שמצאתם מדריך זה לשימושי עבורכם. יש לכם טיפים נוספים או שאלות בנושא שתרצו לשתף? אשמח לשמוע.

ברק ארזואן
ברק ארזואן

בן 24, חי ונושם את תחום המחשבים והרשתות מגיל מאוד צעיר, הספיק להכיר את WordPress 3.0, בגיל 16 ניהל מספר אתרים מבוססי Wordpress, בעל רקע טכני נרחב בתשתיות פיתוח ותשתיות ענן, הצטרף לנבחרת המנצחת של uPress לאחר לאחר ניסיון ניהולי מוכח בהובלת צוות טכני, כיום משרת את לקוחות החברה בכלל ערוצי השירות הטכני.

  • אולי יעניין אותך..

  • כתיבת תגובה

    האימייל לא יוצג באתר. שדות החובה מסומנים *