משתמשים שמקלידים "naутбук" במקום "ноутбук" או "javascipt" במקום "javascript" עוזבים בלי למצוא את המוצר הנכון. אנחנו פותרים זאת על ידי הגדרת חיפוש fuzzy ב-Elasticsearch. הליבה היא מרחק לוונשטיין: מספר העריכות של תו בודד (הוספה, מחיקה, החלפה, החלפת מקומות) הנדרשות כדי להפוך מחרוזת אחת לאחרת. ראו עוד ב-מרחק לוונשטיין.
שגיאות הקלדה כאלה גורמות לעד 30% מתוצאות חיפוש ריקות בחנויות מסחר אלקטרוני גדולות. המהנדסים שלנו עם 5 שנות ניסיון ב-Elasticsearch מגדירים חיפוש fuzzy מקצה לקצה. אנו מבטיחים ש-99% משגיאות ההקלדה של המשתמשים מטופלות כראוי תוך שמירה על מהירות חיפוש מקובלת גם באינדקסים עם מיליוני מסמכים. בקשו ייעוץ — ננתח את פרופיל החיפוש שלכם ונציע הגדרות אופטימליות.
בחירת fuzziness לפרויקט שלכם
הפרמטר המרכזי הוא fuzziness. הוא קובע כמה עריכות מותרות. AUTO מדויק פי 5 בשאילתות קצרות מאשר fuzziness: 2 קבוע.
| ערך | תיאור | דוגמה עבור "ноутбук" (8 תווים) |
|---|---|---|
| 0 | התאמה מדויקת | רק "ноутбук" |
| 1 | פעולת עריכה אחת | "ноутбук", "ноутбу" (מחיקה) |
| 2 | 2 עריכות | "ноутбук", "наутбук" (החלפה), "ноубук" (מחיקה+החלפה) |
AUTO |
0 עבור אורך 1-2, 1 עבור 3-5, 2 עבור 6+ | עבור "ноутбук" (8) → 2 |
AUTO הוא אופטימלי ברוב המקרים. כפיית fuzziness: 2 על שאילתות קצרות יוצרת יותר מדי התאמות שגויות.
למה prefix_length קריטי לביצועים
ללא prefix_length, כל טוקן באינדקס הופך למועמד להרחבת fuzzy. עבור אינדקס עם 10M מסמכים, זה יכול לגרום לעשרות אלפי פעולות קלט/פלט. הגדרת prefix_length: 2 מפחיתה את המועמדים בסדר גודל. עבור מסדי נתונים עם מונחים טכניים (קודים, SKU), אנו ממליצים להגדיל ל-3–4.
דוגמה לשאילתת Fuzzy
POST /products/_search
{
"query": {
"fuzzy": {
"title": {
"value": "наутбук",
"fuzziness": "AUTO",
"prefix_length": 2,
"max_expansions": 50,
"transpositions": true
}
}
}
}POST /products/_search { "query": { "fuzzy": { "title": { "value": "наутбук", "fuzziness": "AUTO", "prefix_length": 2, "max_expansions": 50, "transpositions": true } } } } — 2 התווים הראשונים חייבים להתאים בדיוק. בלעדיו, prefix_length על שאילתה של תו אחד "a" יכולה להתאים למספר עצום של טוקנים. הגדירו לפחות 1–2.
fuzziness: 2 — המספר המרבי של וריאציות ששאילתת fuzzy מתרחבת אליהן. ברירת המחדל של 50 בדרך כלל מספיקה.
max_expansions — מאפשר החלפת תווים סמוכים (ab → ba). מופעל כברירת מחדל. זה מתאים למרחק Damerau–Levenshtein.
Fuzzy Query לעומת Match עם Fuzziness
| קריטריון | Fuzzy Query | Match Query עם Fuzziness |
|---|---|---|
| ניתוח שאילתה | לא, ערך גולמי | כן, טוקניזציה ונורמליזציה |
| יישום | לשדה אחד | לכל טוקן לאחר ניתוח |
| צורות דקדוקיות | לא נחשבות | נחשבות (גזירה, מילים נרדפות) |
| המלצה | למזהים ייחודיים | למחרוזות חיפוש של משתמשים |
שילוב חיפוש מדויק ו-Fuzzy
הפרקטיקה המומלצת: הרצת חיפושים מדויקים ו-fuzzy במקביל, עם הגברת תוצאות מדויקות לראש:
POST /products/_search
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "наутбук",
"fields": ["title^3", "description"],
"boost": 2
}
},
{
"multi_match": {
"query": "наутбук",
"fields": ["title^3", "description"],
"fuzziness": "AUTO",
"prefix_length": 2,
"boost": 1
}
}
]
}
}
}התאמות מדויקות עם boost transpositions מדורגות גבוה יותר מאשר fuzzy. מסמכים עם התאמות מדויקות עולים לראש; תוצאות fuzzy עדיין מופיעות אך נמוך יותר.
הניסיון שלנו: מקרה חנות אלקטרוניקה
לקוח עם 500K מוצרים נתקל לעתים קרובות בשגיאות הקלדה במותגים: "samsung", "samsun", "samsung". הגדרנו חיפוש fuzzy עם POST /products/_search { "query": { "bool": { "should": [ { "multi_match": { "query": "наутбук", "fields": ["title^3", "description"], "boost": 2 } }, { "multi_match": { "query": "наутбук", "fields": ["title^3", "description"], "fuzziness": "AUTO", "prefix_length": 2, "boost": 1 } } ] } } } ו-2 בשדות כותרת, מותג ותיאור. זמן החיפוש גדל ב-15%, אך שיעור התוצאות הריקות ירד מ-8% ל-0.5%. בנוסף, הוספנו מנתח פונטי (Double Metaphone) למותגים באנגלית. זה חסך כ-30% בתקציב על ידי שימוש בתכונות מובנות של Elasticsearch במקום כלים של צד שלישי.
הגדרת חיפוש Fuzzy שלב אחר שלב
- צרו את האינדקס עם מיפויים לשדות הדורשים חיפוש fuzzy.
- בחרו מנתח (standard, פונטי אם נדרש).
- השתמשו ב-
fuzziness: AUTOעםprefix_length: 2בשאילתות. - הגדירו
multi_matchלביצועים. - בדקו על מדגם של שגיאות הקלדה אופייניות.
- כווננו פרמטרים לפי הצורך.
מה כוללת העבודה שלנו
- ניתוח שגיאות הקלדה נפוצות ודפוסי חיפוש של המשתמשים שלכם.
- הגדרת מיפוי אינדקס לחיפוש fuzzy (בחירת שדות, מנתחים).
- כוונון fuzziness, prefix_length, max_expansions עבור הנתונים שלכם.
- אופטימיזציית ביצועים (פרופילינג, הגדרות shard).
- בדיקות על קבוצות שאילתות אמיתיות עם התאמות.
- תיעוד והעברת גישה.
- הדרכת הצוות שלכם על שימוש בחיפוש fuzzy.
לוחות זמנים ועלות
הגדרה בסיסית (fuzziness + פרמטרים) — יום עסקים אחד. אם נדרש ניתוח פונטי או שילוב רוסית-אנגלית מעורב, הוסיפו יום אחד. העלות נקבעת באופן אישי. צרו קשר — נעריך את הפרויקט שלכם. קבלו ייעוץ עכשיו!
מומחי Elastic המוסמכים שלנו (5+ שנות ניסיון) סיפקו למעלה מ-20 פרויקטים של חיפוש fuzzy בסביבת ייצור. אנו מבטיחים: אם התוצאה לא מספקת אתכם, נבצע עבודה חוזרת ללא עלות נוספת.







