כשמחפשים "листья" עם גזירה בסגנון Snowball ב-Elasticsearch, המערכת מחזירה רק את "листь" — ומפספסת את "лист", "листовой". זו בעיה אופיינית בניתוח מורפולוגי של רוסית: גזירה מבוססת-כללים חותכת סיומות, ומאבדת עד 40% מהמסמכים הרלוונטיים. אנחנו משתמשים בלמטיזציה המבוססת על מילוני Hunspell כדי להבטיח חיפוש מדויק בכל צורות המילים של רוסית ואנגלית. במשך יותר מ-5 שנים השלמנו למעלה מ-30 פרויקטים של הגדרת חיפוש לחנויות מקוונות, פורטלי חדשות ופורטלים ארגוניים. המהנדסים שלנו מחזיקים בהסמכות Elastic Certified Engineer ובעלי הבנה מעמיקה באלגוריתמים לשוניים.
ניתוח מורפולוגי אינו רק חיתוך סיומות — הוא ניתוח מבוסס-מילון. לפי התיעוד של Elasticsearch, למטיזציה מספקת 30–50% יותר תוצאות רלוונטיות מאשר גזירה. להלן נפרט אילו גישות עובדות בפועל וכיצד אנו מיישמים אותן.
מדוע גזירה נופלת מלמטיזציה?
גזירה (Snowball, Porter) חותכת סיומות לפי כללים. מהירה — 1–2 אלפיות השנייה לכל טוקן, אך לא מדויקת. לדוגמה, "бегать" ו-"бег" מייצרות גזעים שונים, למרות שהן קשורות סמנטית. עבור רוסית זה קריטי: צורות מילים יכולות להיות שונות מאוד (бежать, бежал, бегущий). למטיזציה משתמשת במילונים (Hunspell, Mystem) ומצמצמת מילים לצורת הבסיס שלהן. היא איטית יותר בזמן אינדוקס (פי 3–10), אך דיוק החיפוש משתפר ב-30–50%. בפרויקטים שלנו, למטיזציה עם Hunspell מדויקת פי 1.5 מאשר Snowball.
| פרמטר | גזירה (Snowball) | למטיזציה (Hunspell) |
|---|---|---|
| מהירות אינדוקס | 1–2 אלפיות השנייה/טוקן | 5–20 אלפיות השנייה/טוקן |
| דיוק חיפוש לרוסית | ~60% | ~90% |
| תלות במילון | לא | נדרש מילון של 50–500 מגה-בייט |
| תמיכה בצורות מילים | מוגבלת | למטיזציה מלאה |
כיצד להגדיר Hunspell לרוסית ואנגלית?
התקנת המילונים אורכת יום עסקים אחד. אנו משיגים מילונים ממאגר LibreOffice.
mkdir -p /etc/elasticsearch/hunspell/ru_RU
cd /etc/elasticsearch/hunspell/ru_RU
wget https://cgit.freedesktop.org/libreoffice/dictionaries/plain/ru_RU/ru_RU.dic
wget https://cgit.freedesktop.org/libreoffice/dictionaries/plain/ru_RU/ru_RU.aff
# Аналогично для en_USלאחר הוספת המילונים, יש להפעיל מחדש את Elasticsearch וליצור אינדקס עם האנלייזר.
PUT /articles
{
"settings": {
"analysis": {
"filter": {
"ru_hunspell": {
"type": "hunspell",
"locale": "ru_RU",
"dedup": true
},
"en_hunspell": {
"type": "hunspell",
"locale": "en_US",
"dedup": true
}
},
"analyzer": {
"ru_en_morphology": {
"tokenizer": "standard",
"filter": ["lowercase", "ru_hunspell", "en_hunspell", "unique"]
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "ru_en_morphology",
"search_analyzer": "ru_en_morphology"
}
}
}
}בדיקת איכות:
POST /articles/_analyze
{
"analyzer": "ru_en_morphology",
"text": "Разработчики создали приложение для управления задачами"
}
# Ожидаемые токены: разработчик, создать, приложение, управление, задачаאתגרים מופיעים עם תוכן דו-לשוני. אנו משתמשים ב-multi-field עם אנלייזרים שונים לרוסית ואנגלית, ולאחר מכן ב-multi-match עם boosting. זה מגביר את הרלוונטיות לשאילתות מעורבות.
כיצד לשפר חיפוש בתוכן מעורב?
לאתרים עם תוכן ברוסית ואנגלית, אנו מיישמים multi-field: שדה אחד עם ru_hunspell ואחר עם en_hunspell. חיפוש דרך multi_match עם מקדם 1.5 לשפה הראשית. זה משפר את הדיוק לשאילתות מעורבות ב-25%. לדוגמה, השאילתה "управление tasks" מוצאת מסמכים בשתי השפות.
| שיטה | דיוק ל-ru | דיוק ל-en | זמן תגובה |
|---|---|---|---|
| רגיל בלבד | 55% | 70% | <30 אלפיות השנייה |
| Hunspell ru/en multi-field | 88% | 85% | <50 אלפיות השנייה |
מקרה בוחן: חנות רהיטים מקוונת
הלקוח שלנו, חנות רהיטים מקוונת, נתקל בבעיה: חיפוש "стул" לא החזיר את "стулья", "стульчик". לאחר יישום Hunspell, דיוק החיפוש השתפר מ-62% ל-89%. בנוסף, הגדרנו multi-field לקטלוג עם שמות איטלקיים באנגלית. כתוצאה מכך, שיעור ההמרה בחיפוש עלה ב-12%, וההכנסות גדלו ב-15%. ההתקנה ארכה 3 ימי עסקים.
תהליך התקנה כולל
- ניתוח נתונים: הערכת נפח, הרכב שפות, סוגי שאילתות.
- בחירת מילון: Hunspell ל-ru/en, בתוספת מילוני משתמש מותאמים אם נדרש.
- הגדרת אינדקס: הגדרת אנלייזרים, בדיקה על מדגם.
- אינדוקס מחדש: יצירת אינדקס חדש עם מורפולוגיה, העברת נתונים.
- אופטימיזציה: כוונון
mkdir -p /etc/elasticsearch/hunspell/ru_RU cd /etc/elasticsearch/hunspell/ru_RU wget https://cgit.freedesktop.org/libreoffice/dictionaries/plain/ru_RU/ru_RU.dic wget https://cgit.freedesktop.org/libreoffice/dictionaries/plain/ru_RU/ru_RU.aff # Аналогично для en_US,PUT /articles { "settings": { "analysis": { "filter": { "ru_hunspell": { "type": "hunspell", "locale": "ru_RU", "dedup": true }, "en_hunspell": { "type": "hunspell", "locale": "en_US", "dedup": true } }, "analyzer": { "ru_en_morphology": { "tokenizer": "standard", "filter": ["lowercase", "ru_hunspell", "en_hunspell", "unique"] } } } }, "mappings": { "properties": { "content": { "type": "text", "analyzer": "ru_en_morphology", "search_analyzer": "ru_en_morphology" } } } },POST /articles/_analyze { "analyzer": "ru_en_morphology", "text": "Разработчики создали приложение для управления задачами" } # Ожидаемые токены: разработчик, создать, приложение, управление, задача. - בדיקות קבלה: השוואת תוצאות חיפוש לפני/אחרי, התאמת מילות עצירה.
- תיעוד ומסירה: סכמת אינדקס, נהלי תחזוקה.
מה כלול
- הכנה והתקנה של מילוני Hunspell לרוסית ואנגלית.
- הגדרת אנלייזר מותאמת למאפייני התוכן (מילות עצירה, הסרת כפילויות).
- סכמת אינדקס עם multi-field לחיפוש דו-לשוני.
- סקריפטים לאינדוקס מחדש ואופטימיזציית ביצועים (bulk, forcemerge).
- תיעוד הגדרות והוראות להוספת מילונים חדשים.
- שימוש במילוני Hunspell ברישיון.
- אחריות על פעולת האנלייזר למשך 30 יום לאחר המסירה.
דוגמת הגדרה לאינדקס דו-לשוני
PUT /articles_bilingual
{
"settings": {
"analysis": {
"filter": {
"ru_hunspell": {
"type": "hunspell",
"locale": "ru_RU",
"dedup": true
},
"en_hunspell": {
"type": "hunspell",
"locale": "en_US",
"dedup": true
}
},
"analyzer": {
"ru_analyzer": {
"tokenizer": "standard",
"filter": ["lowercase", "ru_hunspell", "unique"]
},
"en_analyzer": {
"tokenizer": "standard",
"filter": ["lowercase", "en_hunspell", "unique"]
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"fields": {
"russian": {
"type": "text",
"analyzer": "ru_analyzer"
},
"english": {
"type": "text",
"analyzer": "en_analyzer"
}
}
}
}
}
} לוחות זמנים
זמן משוער: 2 עד 5 ימי עסקים, תלוי בנפח הנתונים ובמורכבות ההגדרה. התמחור מחושב באופן אישי. החיסכון הממוצע בעלויות על חידודי חיפוש לאחר יישום Hunspell הוא 30% בהשוואה לפתרונות חלופיים.
אנו מבטיחים שדיוק החיפוש לצורות מילים יעלה ב-30% לפחות בהשוואה לגזירת Snowball הסטנדרטית.
אם ברצונכם לשפר את החיפוש בפרויקט שלכם — צרו קשר לייעוץ. נבחן את המשימה שלכם. הזמינו התקנת חיפוש מורפולוגי ב-Elasticsearch. קבלו ייעוץ.







