facebook pixel בלוג: שיפור משמעותי באתר - סינון מוצרים - www.4project.co.il
Main logo www.4project.co.il
כל הרכיבים לפרוייקט שלכם
עגלת קניות

העגלה ריקה

שיפור משמעותי באתר - סינון מוצרים


2024-03-15 14:43:06
אני גהה להציג שיפור (מאוד) משמעותי באתר - סינון מוצרים!

הפיתוח נמצא בשלבי סיום סופיים, אבל הכל נראה עובד ואפילו מאוד יעיל להפתעתי...
"בחירת מאפייני סינון מוצרים"

למי שרוצה לוותר על הקריאה, בכל מחלקה תמצאו כפתור "סינון מוצרים במחלקה" לפני הרשימה של המוצרים. לחצו עליו ותהנו Smile emoticon
"כפתור סינון מוצרים"

בנייד תפריט הסינון נראה שונה, אבל אופן השימוש בו זהה למה שמפורט בהמשך.

למה זה כל כך משמעותי?

כמות המוצרים באתר עולה כל הזמן. אם אני מסתכל על המספור של המוצרים, שעולה אוטומטית עם כל הוספת מוצר חדש, המספר עומד נכון לרגע זה 1,029,027! 
כן... יותר ממיליון מוצרים במערכת...
נכון, לא כל המוצרים פעילים, חלקם הועברו למחלקת "לא למכירה" (כ-140 אלף מוצרים) כדי לאפשר לאנשים לגשת למוצרים שנמכרו בעבר ולראות את המאפיינים או לפתוח קישור למפרט.
חלק גדול נוסף אוטומטית דרך העדכונים של מחלקת "רכש רכיבים" (כ-653 אלף מוצרים). משום מה הספקים אוהבים להוסיף המון מוצרים ולהוריד אותם אחרי כמה שבועות, מה ש"מזהם" את ה-database של האתר ואני עוד לא החלטתי מה לעשות עם התופעה הזו.

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

מה עושים?

השינוי הראשון היה להפוך את החיפוש לחכם ויעיל יותר, כזה שמשתמש ביכולות המשוכללות של מבנה הנתונים לחפש טקסט לפי מחרוזת, אבל יש מגבלה קטנה... המחרוזת צריכה להופיע בתחילת המילה. למשל, אם תחפשו "Arduino", תמצוא כרטיסי ארדואינו רבים, אבל כנראה שלא תקבלו בתוצאות כרטיסי "SeeeDuino" שבכל זאת יהיה הגיוני לראות ברשימה. אם תחפשו תחפשו "duino" בציפיה לקבל את כל המוצרים שיש להם "duino" בשם המוצר... לא תקבלו אף מוצר בתוצאה, כי כאמור מחרוזת החיפוש צריכה להופיע בתחילת המילה.

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

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

שני סוגי החיפושים (הכללי ובמחלקה) מספקים מענה חלקי לשאלות שאנשים שואלים. לא תמיד ברור מה צריך לחפש, למשל מישהו רוצה מנוע שמסתובב במהירות של 1 סיבובים לדקה, מה צריך לחפש? 1 סל"ד? 1rpm? או "1 rpm" (עם רווח בין 1 ל-rpm)? ומה אם מישהו מוכן להתפשר ומנוע שמסתובב בין 1 ל-2 סל"ד יהיו טובים לו? איך מקבלים רשימה של כל האפשרויות האלא?

חיפוש לפי ערכי מאפיינים זה בדיוק מה שהסינון החדש מאפשר!

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

איך זה עובד?

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

בחירת כמה ערכים של אותו המאפיין תשתמש בלוגיקת "או" (OR) בין הערכים. כלומר במקרה זה יוצגו מנועים שמהירות הסיבוב שלהם היא 1 או 2 סל"ד.
בחירת מאפיינים שונים לסינון תשתמש בלוגיקת "וגם" (AND) בין המאפיינים. כלומר, אם בחרתם מהירות סיבוב 1 סל"ד וגם קוטר ציר 6 מ"מ, תקבלו תוצאות של מנועים שמתובבים 1 סיבובים לדקה ושיש להם ציר בקוטר 6 מ"מ. יכול להיות גם שלא תקבלו אף תוצאה לפי המאפיינים שבחרתם, כי פשוט אין מוצרים שעונים על כל התנאים.

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

עמוד התוצאות יציג לכם את המאפיינים לפיהם בוצע הסינון:
"דוגמה לתוצאות סינון"

צריכים לשנות את מאפייני הסינון? לחצו שוב על כפתור ה-"סינון מוצרים במחלקה" כדי להגיע למאפייני החיפוש והשדות לפיהם בוצע הסינון יודגשו בצבע:
"מאפייני חיפוש נשמרים"

רוצים עוד? הנה עוד שכלול שיעזור לכם להגיע למוצרים שאתם מחפשים:
יש מוצרים מאותו סוג שמחולקים לתתי-מחלקות כדי לייצר הפרדה לוגית, כמו למשל אותם מנועים DC, שמחולקים לתתי-מחלקות לפי גודל וזרם של המנוע, או מנועי סרוו שמחולקים לתתי-מחלקות לפי יצרן:
"מוצרים מחולקים לתתי-מחלקות"

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

גודל מנוע: סטנדרטי (שימו לב שהשתמשתי בסינון הערכים כי היו שם לא מעט):
"בחירת גודל מנוע: סטנדרטי"

וצורת ציר: 25 שיניים (גם במקרה זה סיננתי את האפשרויות שיכללו "25" בשם שלהם ובחרתי את כל 4 האפשרויות, כי יכול להיות שאלה אותם הצירים, פשוט עם שמות שונים):
"בחירת צורת ציר: 25 שיניים"

סינון ו... קיבלנו בדיוק את מה שרצינו:
"תוצאות סינון של מנועי סרוו בגודל סטנדרטי עם ציר 25 שיניים"

הרשימה כוללת 47 מנועים של כל היצרנים. חלום...

מאחורי הקלעים

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

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

למה סיכון? כי להגדיר את כל המאפיינים האלה לכל המוצרים ידנית זה הרבה עבודה... תחשבו על זה, נניח 10,000 מוצרים, לכל מוצר 10-20 מאפיינים שהערך שלו צריך לבחור מהרשימה. ולפני זה צריך להגדיר את כל הערכים השימושיים ברשימה כזו... למצוא את הערך אצל ספק המוצר... כל זה לוקח הרבה זמן.

בהשוואה למתחרים, שפשוט לוקחים טקסט קיים מהספקים ומציגים אותו ללקוחות (ובמקרה הטוב מתרגמים אותו לעברית ב-google translate). 
או אפילו לספקים הבינלאומיים הגדולים, כמו SparkFun שהיה סמן הדרך בשבילי בתחילת הדרך, גם Adafruit ו-Pololu, אף אחד מהם לא מציע סינון כזה. מהם נראה שרק Pololu שומרים את המאפיינים בצורה דומה למה שעשיתי, אך עדיין לא מאפשרים לסנן לפי ערכי המאפיינים.
מי שכן הלך לכיוון הזה הם חנויות ענק, כמו DigiKey, Mouser, LCSC וכו'. לא חושב שאני בליגה שלהם, אבל עדיין משמח לראות שלקחתי את הכיוון של הגדולים Smile emoticon
בתחילת דרכי, ב-2011 לא חשבתי שיהיו כל כך הרבה מוצרים ושצריך יהיה סינון כדי להגיע למה שרוצים, אבל ההחלטה הזו השתלמה בהחלט. 

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

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

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

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

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

הודעות נוספות:

  • בלוג תוכניות למערכת בית חכם DIY

    תוכניות למערכת בית חכם DIY

    2023-12-17 16:16:30

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

  • בלוג dual boot - הצלחה

    dual boot - הצלחה

    2023-10-05 18:17:07

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

  • בלוג המסע לחיפוש ערכת אלקטרוניקה

    המסע לחיפוש ערכת אלקטרוניקה

    2023-08-14 09:13:50

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

  • בלוג נפרדים מ-Actobotics

    נפרדים מ-Actobotics

    2023-06-07 19:53:24

    העולם משתנה. גם המוצרים שנמכרים באתר. אבל לפעמים זה שינוי די גדול.
    אפשר להכריז סופית שהיצרן של סדרת רכיבי המכניקה Actobotics האינצ'יט החליט להפסיק לייצר סדרה זו ולעבור סופית לסדרת ה-goBILDA המילימטרית.

  • בלוג dual boot - נראה עובד

    dual boot - נראה עובד

    2023-05-05 21:38:04

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