הגדרת השלמה אוטומטית ב-Elasticsearch (Completion Suggester)

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

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת השלמה אוטומטית ב-Elasticsearch (Completion Suggester)
בינוני
~2-3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1201
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    619

משתמש שממתין 200 אלפיות שנייה לתגובת השלמה אוטומטית הורג את חווית המשתמש. בפרויקט מסחר אלקטרוני אלקטרוני אחד, כל תו שהוקלד הפעיל שאילתת חיפוש טקסט מלא מול מסד הנתונים. עומס השרת גדל, המהירות ירדה, ולקוחות עזבו. הפתרון — Elasticsearch Completion Suggester. מנגנון זה, המבוסס על FST (Finite State Transducer), מאחסן נתונים בזיכרון ומחזיר תגובות תוך 1–5 אלפיות שנייה. יישמנו אותו ביותר מ-50 פרויקטים במשך למעלה מ-10 שנים ואנו מבטיחים ביצועים יציבים תחת עומס.

מדריך זה מכסה הגדרת השלמה אוטומטית של Elasticsearch באמצעות Completion Suggester, תוך השוואה עם Edge N-gram. איך זה עובד: אתה מקליד "no" — המערכת מחזירה "notebook", "socks", "november" ללא דיחוי. ה-suggester משתמש בשדה completion המכיל מערך input (אפשרויות השלמה) ו-weight אופציונלי (עדיפות). עבור מוצרים פופולריים, המשקל נקבע על סמך מכירות או קליקים.

כיצד ליישם Completion Suggester להשלמה אוטומטית?

שלב 1: הגדרת ה-Mapping

Completion Suggester הוא האפשרות המהירה ביותר אך פחות גמישה: ללא ניקוד טקסט מלא, סינון מוגבל. Mapping עבור שדה completion:

PUT /products
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text"
      },
      "suggest": {
        "type": "completion",
        "analyzer": "simple",
        "search_analyzer": "simple",
        "preserve_separators": true,
        "preserve_position_increments": true,
        "max_input_length": 50
      }
    }
  }
}

שלב 2: אינדוקס מסמכים עם משקלים

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

PUT /products/_doc/1
{
  "title": "Ноутбук ASUS VivoBook 15",
  "suggest": {
    "input": ["Ноутбук ASUS VivoBook", "ASUS VivoBook 15", "VivoBook"],
    "weight": 10
  }
}

שלב 3: שאילתה עם Fuzzy ודילוג על כפילויות

שאילתת השלמה אוטומטית עם fuzzy:

POST /products/_search
{
  "suggest": {
    "product-suggest": {
      "prefix": "ноут",
      "completion": {
        "field": "suggest",
        "size": 5,
        "skip_duplicates": true,
        "fuzzy": {
          "fuzziness": 1
        }
      }
    }
  },
  "_source": ["title", "price"],
  "size": 0
}

התגובה מחזירה אפשרויות עם שדות PUT /products { "mappings": { "properties": { "title": { "type": "text" }, "suggest": { "type": "completion", "analyzer": "simple", "search_analyzer": "simple", "preserve_separators": true, "preserve_position_increments": true, "max_input_length": 50 } } } } . זמן תגובה — 1–5 אלפיות שנייה.

בחירה בין Completion Suggester ל-Edge N-gram

הבחירה תלויה בעדיפות: מהירות מול גמישות. ה-suggester מהיר פי 10 מ-N-gram תחת אותו עומס — אושר על ידי מבחני העומס שלנו. אם הנתונים שלך סטטיים (קטלוג מוצרים, רשימת ערים) ונדרשת מהירות מקסימלית — בחר בו. אם נדרש חיפוש טקסט מלא עם סינון ומיון — Edge N-gram.

מהו Context Suggester וכיצד להשתמש בו?

Context Suggester מרחיב את מנגנון ההשלמה עם סינון לפי הקשר — לדוגמה, לפי קטגוריית מוצר. Mapping עם הקשר:

PUT /products
{
  "mappings": {
    "properties": {
      "suggest": {
        "type": "completion",
        "contexts": [
          {
            "name": "category",
            "type": "category",
            "path": "category"
          }
        ]
      },
      "category": {
        "type": "keyword"
      }
    }
  }
}

אינדוקס עם הקשר:

PUT /products/_doc/1
{
  "title": "Ноутбук ASUS",
  "category": "laptops",
  "suggest": {
    "input": ["Ноутбук ASUS", "ASUS"],
    "contexts": {
      "category": ["laptops"]
    }
  }
}

שאילתה עם הקשר ו-boost:

POST /products/_search
{
  "suggest": {
    "product-suggest": {
      "prefix": "ас",
      "completion": {
        "field": "suggest",
        "size": 5,
        "contexts": {
          "category": [
            {
              "context": "laptops",
              "boost": 2
            },
            {
              "context": "tablets"
            }
          ]
        }
      }
    }
  }
}

Context Suggester מגדיל את הרלוונטיות: אם המשתמש נמצא בקטע "מחשבים ניידים", ההצעות מציגות רק מחשבים ניידים. בפרויקט אחד, השגנו עלייה של 30% בשיעור הקליקים על הצעות בזכות הדיוק.

מהן המגבלות של Completion Suggester?

Edge N-gram: חלופה עם חיפוש טקסט מלא

Edge N-gram ממפה אסימונים חלקיים (אורך מינימלי של 2 תווים) ומשתמש בשאילתת PUT /products/_doc/1 { "title": "Ноутбук ASUS VivoBook 15", "suggest": { "input": ["Ноутбук ASUS VivoBook", "ASUS VivoBook 15", "VivoBook"], "weight": 10 } } סטנדרטית עם ניקוד TF/IDF מלא, סינון ומיון. דוגמת mapping:

PUT /products
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "edge_ngram_tokenizer": {
          "type": "edge_ngram",
          "min_gram": 2,
          "max_gram": 20,
          "token_chars": ["letter", "digit"]
        }
      },
      "analyzer": {
        "autocomplete_index": {
          "type": "custom",
          "tokenizer": "edge_ngram_tokenizer",
          "filter": ["lowercase"]
        },
        "autocomplete_search": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": ["lowercase"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "autocomplete_index",
        "search_analyzer": "autocomplete_search"
      }
    }
  }
}

שאילתה:

POST /products/_search
{
  "query": {
    "match": {
      "title": {
        "query": "ноут",
        "operator": "and"
      }
    }
  },
  "sort": [
    {
      "_score": "desc"
    }
  ],
  "size": 5
}
תכונה Completion Suggester Edge N-gram
מהירות תגובה 1–5 אלפיות שנייה 10–50 אלפיות שנייה
גמישות שאילתה מוגבלת (prefix) מלאה (match, סינון, מיון)
שימוש בזיכרון גבוה (FST) בינוני (אינדקס הפוך)
תמיכה בשגיאות כתיב fuzzy מובנה דורש מנתח נפרד
מקרה שימוש מומלץ נתונים סטטיים עם משקלים נתונים דינמיים עם חיפוש טקסט מלא

טעויות נפוצות בהגדרת השלמה אוטומטית

  • שכחת POST /products/_search { "suggest": { "product-suggest": { "prefix": "ноут", "completion": { "field": "suggest", "size": 5, "skip_duplicates": true, "fuzzy": { "fuzziness": 1 } } } }, "_source": ["title", "price"], "size": 0 } : בלעדיו, אפשרויות כפולות עשויות להופיע.
  • אי הגדרת _source — ברירת המחדל היא 50, עשויה להיות לא מספקת עבור שמות ארוכים.
  • שימוש ב-PUT /products { "mappings": { "properties": { "suggest": { "type": "completion", "contexts": [ { "name": "category", "type": "category", "path": "category" } ] }, "category": { "type": "keyword" } } } } בשאילתה הראשית אך שכחת PUT /products/_doc/1 { "title": "Ноутбук ASUS", "category": "laptops", "suggest": { "input": ["Ноутбук ASUS", "ASUS"], "contexts": { "category": ["laptops"] } } } — שדות נוספים מוחזרים.
  • אי הגדרת debounce בקצה הקדמי: שליחת בקשה על כל תו יוצרת מבול בקשות. אנו ממליצים על השהיה של 200–300 אלפיות שנייה וקאשינג של תוצאות קודמות.

דוגמת יישום בצד השרת

דוגמה ב-PHP באמצעות POST /products/_search { "suggest": { "product-suggest": { "prefix": "ас", "completion": { "field": "suggest", "size": 5, "contexts": { "category": [ { "context": "laptops", "boost": 2 }, { "context": "tablets" } ] } } } } } :

public function autocomplete(string $query): array
{
    $response = $this->client->search([
        'index' => 'products',
        'body' => [
            'suggest' => [
                'product-suggest' => [
                    'prefix' => mb_strtolower($query),
                    'completion' => [
                        'field' => 'suggest',
                        'size' => 8,
                        'skip_duplicates' => true,
                        'fuzzy' => ['fuzziness' => 'AUTO'],
                    ]
                ]
            ],
            '_source' => ['title', 'slug', 'price'],
            'size' => 0,
        ]
    ]);

    return array_map(
        fn($opt) => [
            'title' => $opt['text'],
            'url' => '/products/' . $opt['_source']['slug'],
            'price' => $opt['_source']['price'],
        ],
        $response['suggest']['product-suggest'][0]['options'] ?? []
    );
}

בקצה הקדמי, הקפד להוסיף debounce של 200–300 אלפיות שנייה ולשמור תוצאות קודמות במטמון כדי להימנע מעומס על השרת.

מה כלול בפתרון ההשלמה האוטומטית שלנו

חבילת היישום המלאה שלנו להשלמה אוטומטית כוללת:

  • ניתוח דרישות ובחירת המנגנון האופטימלי (Completion Suggester מול Edge N-gram)
  • עיצוב mapping והגדרת אינדקס
  • יישום נקודת קצה API עם תמיכה ב-fuzzy והקשר
  • אינטגרציה בקצה הקדמי (debounce, קאשינג)
  • תיעוד מלא וגישה למאגר הקוד
  • הדרכה למפתחים שלך
  • חודש תמיכה לאחר העלייה לאוויר
  • התחייבות לזמן תגובה של פחות מ-5 אלפיות שנייה

תמחור: הגדרת Completion Suggester בסיסית מתחילה ב-$500. פתרון מלא עם Context Suggester ו-Edge N-gram נע בין $1,000 ל-$2,000, תלוי במורכבות. חיסכון אופייני מהפחתת עומס השרת ושיפור שיעורי ההמרה יכול לעלות על $5,000 בחודש עבור אתרי מסחר אלקטרוני עם תעבורה גבוהה.

לוח זמנים: אנו יכולים להגדיר השלמה אוטומטית בסיסית תוך יום אחד. הוספת Context Suggester אורכת חצי יום נוסף. אינטגרציה מלאה של Edge N-gram עם כל התכונות דורשת 1–2 ימים. צור קשר להערכת פרויקט חינמית — נעריך את הצרכים המדויקים שלך ונספק מחיר קבוע.

תיעוד רשמי של Elasticsearch ממליץ להשתמש ב-Completion Suggester לתרחישי השלמה אוטומטית במהירות גבוהה.