החיפוש באתר שלך לא מוצא "ноутбук" כשהמשתמש מקליד "лэптоп"? או ש"смартфон" לא מחזיר תוצאות עבור "телефон"? זו בעיה אופיינית של האנלייזר הסטנדרטי של Elasticsearch: הוא לא מבין מילים נרדפות ומורפולוגיה של שפה. כדי לגרום לחיפוש לעבוד כמו שצריך, אנחנו מפתחים אנלייזרים מותאמים אישית במפתח פתוח. במשך יותר מ-5 שנים, כיווננו חיפוש עבור יותר מ-50 פרויקטים, כולל חנויות מסחר אלקטרוני ופורטלי חדשות. אנלייזר מותאם אישית מורכב מטוקנייזר ומסנני טוקנים. הם הופכים טקסט לקבוצת טוקנים לאינדקס. במאמר זה, נפרק כיצד להרכיב אנלייזר כזה עבור רוסית, להגדיר מילים נרדפות והשלמה אוטומטית, ולבחון מלכודות טיפוסיות וכיצד להימנע מהן.
עד 70% מהמשתמשים לא מוצאים את המוצר הנכון בגלל הגדרת אנלייזר שגויה. זה מפחית המרה ב-20–30%. הגדרת אנלייזר מותאם אישית פותרת את הבעיה על ידי בחירת מסננים המותאמים לתחום שלך.
| מסנן | מטרה | דוגמת טוקן |
|---|---|---|
lowercase |
המרה לאותיות קטנות | Ноутбук → ноутбук |
stop |
הסרת מילות עצירה | на, в, с |
stemmer |
גיזום (Stemming) | ноутбуки → ноутбук |
synonym |
מילים נרדפות | ноутбук ↔ лэптоп |
edge_ngram |
N-grams להשלמה אוטומטית | ноут → н, но, ноу, ноут |
למה אנלייזר מותאם אישית עדיף על המובנה?
האנלייזר המובנה russian משתמש באלגוריתם Snowball לגיזום. לרוב המשימות זה מספיק, אבל אם אתה צריך מורפולוגיה מדויקת או קבוצה מותאמת של מילות עצירה, אנחנו יוצרים אנלייזר מותאם אישית. זה נותן לך שליטה מלאה על שרשרת המסננים: אתה מחליט אילו מילות עצירה להסיר, איך לטפל במילים נרדפות, והאם יש צורך בגיזום. בנוסף, הגדרה מותאמת אישית מאפשרת הוספת תעתיק לחיפוש בתעתיק (למשל, "noutbuk" → "ноутбук").
איך להגדיר אנלייזר שפה לרוסית?
הגדרה בסיסית
דוגמה עם מילות עצירה מותאמות ושדה להתאמה מדויקת:
{ "settings": {
"analysis": {
"filter": {
"russian_stop": {
"type": "stop",
"stopwords": "_russian_"
},
"russian_stemmer": {
"type": "stemmer",
"language": "russian"
},
"custom_stopwords": {
"type": "stop",
"stopwords": ["это", "также", "при", "для", "что", "как"]
}
},
"analyzer": {
"russian_custom": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "russian_stop", "custom_stopwords", "russian_stemmer"]
},
"russian_exact": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase"]
}
}
}
}
} הוספת תעתיק
משתמשים לעתים קרובות מקלידים בתעתיק: "noutbuk" במקום "ноутбук". תעתיק מיושם דרך { "settings": { "analysis": { "filter": { "russian_stop": { "type": "stop", "stopwords": "_russian_" }, "russian_stemmer": { "type": "stemmer", "language": "russian" }, "custom_stopwords": { "type": "stop", "stopwords": ["это", "также", "при", "для", "что", "как"] } }, "analyzer": { "russian_custom": { "type": "custom", "tokenizer": "standard", "filter": ["lowercase", "russian_stop", "custom_stopwords", "russian_stemmer"] }, "russian_exact": { "type": "custom", "tokenizer": "standard", "filter": ["lowercase"] } } } } } מסוג char_filter, שבו כל אות קירילית ממופה למקבילה לטינית. רשימת המיפוי המלאה נמצאת בתיעוד — אנחנו כוללים אותה באנלייזר. לתעתיק מתקדם, אנחנו משתמשים בתוסף mapping עם ממירי ICU, שמטפל נכון בנורמליזציה של Unicode.
איך להגדיר מילים נרדפות ללא אינדקס מחדש?
מילים נרדפות מאפשרות למצוא מסמכים עם ניסוח שונה. יש שתי גישות:
| פרמטר | מילים נרדפות בזמן אינדוקס | מילים נרדפות בזמן חיפוש |
|---|---|---|
| עדכון | דורש אינדוקס מחדש | ללא אינדוקס מחדש, דרך analysis-icu |
| ביצועי חיפוש | מהיר יותר (פחות טוקנים בשאילתה) | איטי יותר (עיבוד נוסף) |
| גמישות | נמוכה | גבוהה |
האפשרות המומלצת היא מילים נרדפות בזמן חיפוש. הן מאפשרות לשנות כללים ללא אינדוקס מחדש, מה שחיוני לחנויות מסחר אלקטרוני עם מבחר משתנה במהירות. לדוגמה, קובץ מילים נרדפות _reload_search_analyzers:
ноутбук, лэптоп, laptop, notebook смартфон, телефон, мобильный телевизор, тв, tv הגדרת אנלייזר עם מילים נרדפות (רק לחיפוש):
{
"settings": {
"analysis": {
"filter": {
"synonym_filter": {
"type": "synonym",
"synonyms_path": "synonyms/synonyms.txt",
"updateable": true
}
},
"analyzer": {
"search_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "russian_stop", "synonym_filter"]
},
"index_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "russian_stop", "russian_stemmer"]
}
}
}
}
}הדגל config/synonyms/synonyms.txt הוא חובה למילים נרדפות רק לחיפוש. הוא מאפשר טעינה מחדש של מילים נרדפות דרך ноутбук, лэптоп, laptop, notebook смартфон, телефон, мобильный телевизор, тв, tv ללא אינדוקס מחדש. חיסכון בתקציב: אין צורך לבנות מחדש את האינדקס בכל פעם שהמילון משתנה.
הגדרת השלמה אוטומטית עם Edge N-gram
להשלמה אוטומטית בזמן הקלדה, אתה צריך אנלייזר עם { "settings": { "analysis": { "filter": { "synonym_filter": { "type": "synonym", "synonyms_path": "synonyms/synonyms.txt", "updateable": true } }, "analyzer": { "search_analyzer": { "type": "custom", "tokenizer": "standard", "filter": ["lowercase", "russian_stop", "synonym_filter"] }, "index_analyzer": { "type": "custom", "tokenizer": "standard", "filter": ["lowercase", "russian_stop", "russian_stemmer"] } } } } } :
"filter": {
"edge_ngram_filter": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 15
}
}בזמן חיפוש, השתמש באנלייזר ללא N-gram (למשל, רק "updateable": true), אחרת שאילתה עבור "ноут" תתאים לכל טוקני ה-N-gram, מה שיגרום לתוצאות חיוביות שגויות.
אינדקסים רב-לשוניים
שתי גישות: אינדקס אחד עם שדות לכל שפה או אינדקס נפרד לכל שפה. עבור אתרים מרובי אתרים, אינדקס אחד נוח יותר:
"properties": {
"title_ru": {
"type": "text",
"analyzer": "russian_custom"
},
"title_en": {
"type": "text",
"analyzer": "english"
},
"title_de": {
"type": "text",
"analyzer": "german"
}
}שאילתה על פני מספר שפות:
{
"query": {
"multi_match": {
"query": "search term",
"fields": ["title_ru^2", "title_en", "title_de"]
}
}
}הגבר _reload_search_analyzers עבור השדה הרוסי אם הקהל העיקרי שלך הוא דובר רוסית.
מה כלול בפיתוח ולוחות זמנים
אנחנו מספקים פתרון מלא במפתח פתוח. הפיתוח כולל:
- ניתוח הנתונים ודרישות החיפוש שלך
- עיצוב שרשרת מסננים למשימות שלך
- הגדרת מילים נרדפות עם יכולת עדכון מקוון
- אינטגרציה עם האינדקס הקיים שלך
- בדיקות על שאילתות אמיתיות (לפחות 100 תרחישי בדיקה)
- תיעוד על הגדרות ותחזוקה
- הדרכה לצוות שלך (עד שעתיים מקוונות)
פיתוח ובדיקות של אנלייזר מותאם אישית לשפה אחת — מיום עסקים אחד. הגדרת מילים נרדפות עם קובץ ומנגנון עדכון — חצי יום נוסף. הגדרה רב-לשונית עם 3–5 שפות — 2–3 ימים, כולל בדיקות רלוונטיות חיפוש. העלות מחושבת באופן אישי.
הזמן הגדרת אנלייזר לפרויקט שלך — נמצא את ההגדרה האופטימלית.
איך אנחנו ניגשים להגדרה
- ביקורת חיפוש נוכחית — איסוף לוגים של שאילתות, זיהוי תרחישים בעייתיים.
- עיצוב אנלייזר — הגדרת קבוצת מסננים, מילים נרדפות, מילות עצירה.
- אב-טיפוס — פריסת אינדקס בדיקה ובדיקה על נתונים אמיתיים.
- בדיקות — שימוש ב-API
edge_ngramכדי לוודא כל מסנן. לדוגמה:
POST /products/_analyze
{
"analyzer": "russian_custom",
"text": "Ноутбуки и лэптопы для работы"
}התשובה מכילה רשימת טוקנים — המספר והסוג שלהם צריכים להתאים לציפיות (גיזום מקצר סיומות, מילים נרדפות מרחיבות טוקנים). 5. אופטימיזציה — התאמת הגדרות לפי תוצאות בדיקה. 6. פריסה — עדכון אינדקס הייצור ללא השבתה. 7. ניטור — לאחר השקה, מעקב אחר מדדי חיפוש (CTR, תוצאות ריקות).
למה להפקיד הגדרה בידי מקצוענים?
הגדרת אנלייזר שגויה יכולה להפחית רלוונטיות חיפוש פי 2–3. המהנדסים המוסמכים שלנו מבטיחים שאחרי ההגדרה, החיפוש יהיה מדויק ומהיר. קבל ייעוץ על פיתוח אנלייזר — נעריך את הפרויקט שלך ונציע את הפתרון הטוב ביותר. צור קשר כדי לדון בפרטים.
למידע נוסף על אנלייזרים של Elasticsearch.







