בפרויקטים עם קטלוגים העולים על 10,000 פריטים (SKU), חיפוש MySQL הסטנדרטי ב-Magento 2 גרם לעיכובים של 3–5 שניות לכל שאילתה, והרלוונטיות נפגעה—מוצרים לא נמצאו על ידי התאמות חלקיות או מורפולוגיה. החל מגרסה 2.4.0, חיפוש MySQL הוסר לחלוטין מהליבה, וElasticsearch או OpenSearch הפכו לחובה. אנו מגדירים את תשתית החיפוש כך שמשתמשים יקבלו תוצאות מדויקות תוך 100–200 אלפיות השנייה, ושיעורי ההמרה יעלו ב-15–30%.
מדוע Elasticsearch/OpenSearch הם חובה עבור Magento
גרסאות מודרניות של Magento (2.4.4+) אינן תומכות בחיפוש MySQL. ללא Elasticsearch או OpenSearch, לא ניתן לבצע חיפוש טקסט מלא, סינון לפי פנים (faceted filtering), או השלמה אוטומטית. OpenSearch, פיצול של Elasticsearch עם רישיון Apache 2.0, עדיף לפרויקטים חדשים—הוא מפותח באופן פעיל יותר ואין לו הגבלות שימוש. מקורות: Elasticsearch בוויקיפדיה, האתר הרשמי של OpenSearch
| גרסת Magento | Elasticsearch | OpenSearch |
|---|---|---|
| 2.4.3 | 7.10 | — |
| 2.4.4–2.4.5 | 7.16–7.17 | 1.x |
| 2.4.6 | 8.x | 2.x |
| 2.4.7+ | 8.x | 2.x |
OpenSearch מציג תכונות חדשות מהר יותר (לדוגמה, חיפוש k-NN) ויש לו מודל פיתוח שקוף יותר.
כיצד אנו מגדירים חיפוש לשפה הרוסית
המנתח הסטנדרטי של Magento אינו מתחשב במורפולוגיה רוסית: המילה 'платье' לא תמצא את 'платья'. אנו מחברים את התוסף analysis-icu ומגדירים מנתח מותאם אישית:
לחצו לצפייה בתצורת המנתח
PUT /magento2_product_1/_settings
{
"analysis": {
"analyzer": {
"russian_search": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "russian_stop", "russian_stemmer"]
}
},
"filter": {
"russian_stop": {
"type": "stop",
"stopwords": "_russian_"
},
"russian_stemmer": {
"type": "stemmer",
"language": "russian"
}
}
}
}גישה זו משפרת את הרלוונטיות ב-40–60% בהשוואה למנתח ברירת המחדל. ללא זה, משתמשים דוברי רוסית לא ימצאו מוצרים לפי נטיות ומילות יחס, מה שיפחית ישירות את ההמרה.
מה זה Reindexing ללא השבתה (Zero-Downtime)?
Magento משתמש בסכימת כינויים (alias): PUT /magento2_product_1/_settings { "analysis": { "analyzer": { "russian_search": { "type": "custom", "tokenizer": "standard", "filter": ["lowercase", "russian_stop", "russian_stemmer"] } }, "filter": { "russian_stop": { "type": "stop", "stopwords": "_russian_" }, "russian_stemmer": { "type": "stemmer", "language": "russian" } } } } (פעיל) ו-magento2_product_1 (במהלך reindexing). זה מאפשר עדכון האינדקס ללא עצירת החיפוש—חיסכון בתשתית באמצעות reindex ללא השבתה. מיפוי מאפיינים מנוהל דרך magento2_product_1_v2. מאפיינים מותאמים אישית המסומנים כ-Magento\Elasticsearch\Model\Adapter\FieldMapper או searchable נכללים אוטומטית באינדקס:
class CustomFieldMapper extends FieldMapper {
public function getFieldName($attributeCode, $context = []) {
if ($attributeCode === 'ean_code') {
return 'keyword_ean_code'; // точное совпадение
}
return parent::getFieldName($attributeCode, $context);
}
}סכימת הכינויים מבטיחה שבמהלך בניית האינדקס מחדש, האינדקס הישן נשאר פעיל. לאחר השלמתו, האינדקס מוחלף בצורה אטומית. זה מונע אובדן נתונים והשבתות.
התקנת OpenSearch לסביבת ייצור
אנו ממליצים על Docker או התקנה מחבילה על שרת נפרד. לפיתוח, תצורת צומת יחיד מתאימה:
---
# docker-compose.yml
services:
opensearch:
image: opensearchproject/opensearch:2.11.0
environment:
- discovery.type=single-node
- DISABLE_SECURITY_PLUGIN=true
- OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g
ports:
- "9200:9200"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- opensearch-data:/usr/share/opensearch/data
---
באשכול ייצור, מינימום 3 צמתים (1 ראשי + 2 נתונים). דוגמה לתצורת צומת נתונים:
# /etc/opensearch/opensearch.yml
cluster.name: magento-search
node.name: data-node-1
node.roles: [data, ingest]
network.host: 0.0.0.0
discovery.seed_hosts: ["master-node:9300"]
cluster.initial_cluster_manager_nodes: ["master-node"]
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
indices.memory.index_buffer_size: 20%
thread_pool.write.queue_size: 1000
בנוסף, הגדירו גודל heap שלא יעלה על 50% מהזיכרון הזמין והפעילו ניטור דרך filterable.
חיבור Magento ל-OpenSearch
bin/magento config:set catalog/search/engine opensearch
bin/magento config:set catalog/search/opensearch_server_hostname 127.0.0.1
bin/magento config:set catalog/search/opensearch_server_port 9200
bin/magento config:set catalog/search/opensearch_index_prefix magento2
bin/magento config:set catalog/search/opensearch_enable_auth 0
bin/magento config:set catalog/search/opensearch_server_timeout 15
bin/magento indexer:reindex catalogsearch_fulltext
bin/magento cache:flush
curl -X GET "localhost:9200/_cat/indices/magento2*?v&pretty"
curl -X GET "localhost:9200/magento2_product_1/_mapping?pretty" | head -80 כיצד להגדיר רלוונטיות שלב אחר שלב
- הגדירו משקלי מאפיינים (שם, תיאור) בניהול Magento (ערכים 1–10).
- שנו תכנותית את
class CustomFieldMapper extends FieldMapper { public function getFieldName($attributeCode, $context = []) { if ($attributeCode === 'ean_code') { return 'keyword_ean_code'; // точное совпадение } return parent::getFieldName($attributeCode, $context); } }עבור כללים מותאמים אישית. - הפעילו
# docker-compose.yml services: opensearch: image: opensearchproject/opensearch:2.11.0 environment: - discovery.type=single-node - DISABLE_SECURITY_PLUGIN=true - OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g ports: - "9200:9200" ulimits: memlock: soft: -1 hard: -1 volumes: - opensearch-data:/usr/share/opensearch/dataעבור שדות בעלי משקל גבוה—זה מתקן שגיאות כתיב. - הוסיפו מנתח שפה רוסית מותאם אישית (כפי שהוצג לעיל).
- בדקו תוצאות דרך יומני איטיות (slow logs) וכיוונו ספים.
שיפור בהמרת חיפוש מגדיל ישירות את רווחיות החנות. אנו ממליצים להתחיל בסקר של התצורה הנוכחית שלכם—זה לוקח לא יותר משעה.
מה כלול בעבודת הגדרת החיפוש
- סקר של התצורה והביצועים הנוכחיים
- התקנה והגדרה של אשכול OpenSearch (או Elasticsearch)
- אינטגרציה עם Magento 2, כולל מנתחים ומשקלים מותאמים אישית
- אופטימיזציה לשפה הרוסית (מורפולוגיה, stemming)
- הגדרת אינדקסי כינויים ל-reindex ללא השבתה
- הגדרת ניטור (יומני איטיות, בריאות האשכול)
- תיעוד והדרכת צוות
- תמיכה לאחר השקה (חודש אחד)
אנו משלימים הגדרה סוהר תוך 3–5 ימים, תלוי במורכבות הקטלוג. פרויקטים טיפוסיים עולים בין $1,500 ל-$4,000. עם ניסיון של 5+ שנים ולמעלה מ-50 פרויקטי חיפוש Magento מוצלחים, אנו מבטיחים שיפור ברלוונטיות החיפוש ועלייה מדידה בשיעורי ההמרה. צרו קשר לייעוץ—נעריך את הפרויקט שלכם ונציע פתרון אופטימלי. קבלו ייעוץ על הגדרת חיפוש Magento 2—נעריך את הצרכים שלכם ונספק הגדרה מותאמת אישית.
לוחות זמנים להגדרה
| שלב | משך |
|---|---|
| התקנת OpenSearch + חיבור | יום אחד |
| אשכול 3 צמתים עם שכפול | 1–2 ימים |
| התאמת מנתחים ומשקלים | 2–3 ימים |
| אינטגרציה עם Smile ElasticSuite | 3–5 ימים |
ניטור ופתרון תקלות
מדדים מרכזיים: שימוש ב-Heap (לא מעל 75% מ-# /etc/opensearch/opensearch.yml cluster.name: magento-search node.name: data-node-1 node.roles: [data, ingest] network.host: 0.0.0.0 discovery.seed_hosts: ["master-node:9300"] cluster.initial_cluster_manager_nodes: ["master-node"] path.data: /var/lib/opensearch path.logs: /var/log/opensearch indices.memory.index_buffer_size: 20% thread_pool.write.queue_size: 1000 ), זמן השהיית חיפוש (p95 < 200 אלפיות השנייה), קצב אינדוקס. לאבחון אנו משתמשים ביומני איטיות. בעיה נפוצה: heap size. פתרון—מחקו וצרו מחדש את האינדקס באמצעות _cluster/health. קבלו ייעוץ אם אתם זקוקים לעזרה במקרים לא סטנדרטיים. צרו קשר כדי לדון בפרטים.







