شرح مفهرسات Magento 2: دليل المطور الكامل (2026)
مفهرسات Magento 2 تحافظ على سرعة متجرك عن طريق المعالجة المسبقة للبيانات التي كانت ستتطلب وصلات باهظة الثمن في وقت التشغيل — أسعار المنتجات، حالة المخزون، تعيينات الفئات، ونتائج البحث. عندما تتأخر المفهرسات أو تعلق، ترى أسعارًا خاطئة، وفئات فارغة، وبحثًا لا يعيد شيئًا. يشرح هذا الدليل كيف تعمل المفهرسات، وكيفية إدارتها من CLI، وكيفية الحفاظ على صحتها في الإنتاج.
باختصار: المفهرسات تحول بيانات قاعدة البيانات الخام إلى جداول مسطحة محسنة وفهارس بحث. قم بتشغيلها وفقًا لجدول زمني في الإنتاج (
التحديث حسب الجدول)، وراقبindexer_status، ولا تترك متجرًا أبدًا في وضعالتحديث عند الحفظتحت حركة مرور حقيقية.
جدول المحتويات
- ما هي مفهرسات Magento 2؟
- التحديث عند الحفظ مقابل التحديث حسب الجدول
- المفهرسات الرئيسية التي يجب على كل مطور معرفتها
- مرجع أوامر CLI
- كيف تعمل mview وجداول Changelog
- استكشاف أخطاء المفهرسات العالقة أو غير الصالحة
- تحسين الأداء للمتاجر عالية الحركة
- أفضل الممارسات للإنتاج
- الأسئلة الشائعة التقنية
ما هي مفهرسات Magento 2؟
في Magento 2، تعتمد العديد من عمليات المتجر على بيانات محسوبة مسبقًا مخزنة في جداول مسطحة وفهارس بحث بدلاً من استعلامات SQL المباشرة عبر عشرات الجداول المضمومة.
على سبيل المثال، عندما يطلع العميل على صفحة فئة، يقرأ Magento من catalog_product_index_price و catalog_category_product_index بدلاً من إعادة حساب الأسعار المتدرجة والأسعار الخاصة وقواعد الفئات في كل طلب.
بدون مفهرسات: كل قائمة منتجات كانت ستشغل قواعد أسعار معقدة وفحوصات مخزون وعمليات بحث عن السمات في الوقت الفعلي — وهو أمر غير مقبول على نطاق واسع.
مع المفهرسات: يتم إعادة بناء البيانات في الخلفية وتقديمها من جداول محسنة في أجزاء من الألف من الثانية.
منتج محفوظ في لوحة الإدارة
↓
إدخال مكتوب في changelog (mview)
↓
مهمة cron تلتقط التغييرات المعلقة
↓
المفهرس يعالج الصفوف المتأثرة
↓
الجداول المسطحة / Elasticsearch محدثة
↓
المتجر يقدم بيانات جديدة
التحديث عند الحفظ مقابل التحديث حسب الجدول
يدعم Magento 2 وضعين للمفهرسات، يتم تكوينهما لكل مفهرس:
| الوضع | السلوك | الأفضل لـ |
|---|---|---|
| التحديث عند الحفظ | يعيد الفهرسة فور تغير البيانات | التطوير المحلي، الكتالوجات الصغيرة |
| التحديث حسب الجدول | يضع التغييرات في قائمة انتظار؛ cron يعالجها | متاجر الإنتاج (دائمًا) |
تحويل جميع المفهرسات إلى التحديث حسب الجدول
bin/magento indexer:set-mode schedule
العودة إلى التحديث عند الحفظ (تطوير فقط)
bin/magento indexer:set-mode realtime
قاعدة الإنتاج: لا تستخدم أبدًا
التحديث عند الحفظعلى متجر مباشر. استيراد واحد كبير يمكن أن يشغل فهرسة كاملة تقفل الجداول وترفع استخدام المعالج لدقائق.
المفهرسات الرئيسية التي يجب على كل مطور معرفتها
| معرف المفهرس | الغرض | الأعراض الشائعة عند التعطل |
|---|---|---|
catalog_product_price | الأسعار النهائية للعميل (خاصة، متدرجة، قواعد كتالوج) | أسعار خاطئة في PLP/PDP |
cataloginventory_stock | الكمية القابلة للبيع حسب الموقع/المخزون | «نفد من المخزون» رغم وجود العناصر |
catalog_product_attribute | قيم سمات EAV → مسطحة | فلاتر مفقودة، سمات فارغة |
catalog_category_product | تعيينات الفئة ↔ المنتج | منتجات مفقودة من الفئات |
catalogsearch_fulltext | فهرس البحث (Elasticsearch/OpenSearch) | البحث لا يعيد نتائج |
catalogrule_product | قواعد أسعار الكتالوج | أسعار ترويجية غير مطبقة |
inventory | فهرس مخزون MSI (متعدد المصادر) | مخزون خاطئ حسب المصدر/الموقع |
التحقق من الحالة الحالية:
bin/magento indexer:status
مثال على المخرجات:
+----------------------------------+-------------+-----------+---------------------+---------------------+
| ID | العنوان | الحالة | التحديث في | حالة الجدول |
+----------------------------------+-------------+-----------+---------------------+---------------------+
| catalog_product_price | سعر المنتج | جاهز | مجدول | خامل (0 في قائمة الانتظار) |
| catalogsearch_fulltext | بحث الكتالوج| إعادة فهرسة مطلوبة | مجدول | معلق |
+----------------------------------+-------------+-----------+---------------------+---------------------+
مرجع أوامر CLI
إعادة فهرسة كل شيء
bin/magento indexer:reindex
إعادة فهرسة مفهرس محدد
bin/magento indexer:reindex catalog_product_price
bin/magento indexer:reindex catalogsearch_fulltext
إعادة فهرسة مفهرسات متعددة
bin/magento indexer:reindex catalog_product_price cataloginventory_stock
إعادة تعيين مفهرس (يحدده كغير صالح)
bin/magento indexer:reset catalog_product_price
استخدم reset عندما يكون المفهرس عالقًا في حالة Processing قبل تشغيل reindex مرة أخرى.
عرض معلومات المفهرس
bin/magento indexer:info
تعطيل مفهرس مؤقتًا (متقدم)
bin/magento indexer:set-dimensions-mode catalog_product_price none
استخدم أوضاع الأبعاد فقط عندما تفهم MSI/الفهرسة حسب الموقع — التكوين غير الصحيح يمكن أن يسبب عدم تطابق صامت في البيانات.
كيف تعمل mview وجداول Changelog
عندما تعمل المفهرسات في وضع التحديث حسب الجدول، يستخدم Magento إطار Materialized View (mview):
- مشغل قاعدة بيانات يكتب صفًا إلى جدول changelog (مثال
catalog_product_price_cl) عندما تتغير البيانات المصدر. - مهمة cron
indexer_update_all_viewsتقرأ إدخالات changelog المعلقة. - المفهرس يعالج فقط معرفات الكيانات المتغيرة — وليس الكتالوج بأكمله.
فحص الأعمال المتراكمة في changelog
SELECT COUNT(*) FROM catalog_product_price_cl;
SELECT COUNT(*) FROM catalogsearch_fulltext_cl;
الأعمال المتراكمة المتزايدة تعني أن cron لا يستطيع مواكبة. تحقق من:
bin/magento cron:run --group=index
grep -i indexer var/log/cron.log
grep -i indexer var/log/system.log
إعادة تعيين mview معلق
bin/magento indexer:reset catalog_product_price
bin/magento cron:run --group=index
إذا بقيت الرؤية معلقة، تحقق من mview_state في قاعدة البيانات:
SELECT * FROM mview_state WHERE view_id = 'catalog_product_price';
اضبط status = 'idle' فقط بعد التأكد من عدم تشغيل أي عملية مفهرس — وإلا فإنك تخاطر بمعالجة مكررة.
استكشاف أخطاء المفهرسات العالقة أو غير الصالحة
عرض: مفهرس عالق في «Processing»
السبب: فهرسة سابقة تم إنهاؤها (OOM، مهلة، kill يدوي).
الإصلاح:
# تأكد من عدم وجود عملية PHP قيد التشغيل
ps aux | grep indexer
# إعادة تعيين وإعادة فهرسة
bin/magento indexer:reset catalog_product_price
bin/magento indexer:reindex catalog_product_price
إذا استمرت المشكلة، تحقق من ملفات القفل:
ls -la var/locks/
أزل الأقفال القديمة فقط عندما لا تكون أي عملية مفهرس نشطة.
عرض: «تعذر إعادة بناء الفهرس لكتالوج فارغ»
السبب: عادة مشكلة تكامل بيانات — صفوف يتيمة، قيم سمات مفقودة، أو بيانات EAV تالفة.
الإصلاح: فعّل تسجيل المفهرس وافحص الاستثناء:
bin/magento indexer:reindex catalog_product_attribute -vvv
ثم ابحث عن المنتجات ذات السمات المطلوبة المفقودة أو روابط الفئات المكسورة.
عرض: فهرس البحث غير متزامن
بعد الاستيرادات الكبيرة أو إعادة تشغيل كتلة Elasticsearch:
bin/magento indexer:reindex catalogsearch_fulltext
bin/magento cache:flush
تحقق من اتصال Elasticsearch:
curl -s http://localhost:9200/_cluster/health?pretty
عرض: أسعار خاطئة بعد تغيير قاعدة سعر الكتالوج
قواعد الكتالوج تتطلب مفهرسين:
bin/magento indexer:reindex catalogrule_rule catalogrule_product catalog_product_price
أعد الفهرسة دائمًا بترتيب التبعيات — catalogrule_product قبل catalog_product_price.
تحسين الأداء للمتاجر عالية الحركة
1. تشغيل المفهرسات خارج أوقات الذروة عبر cron
تأكد من أن مجموعات cron هذه نشطة في crontab:
* * * * * /usr/bin/php /var/www/html/bin/magento cron:run --group=index
* * * * * /usr/bin/php /var/www/html/bin/magento cron:run --group=default
2. الفهرسة المتوازية (Magento 2.4.4+)
يدعم Magento المفهرسات المتوازية لبعض الأنواع. تحقق من env.php:
'indexer' => [
'use_parallel' => true,
'threads' => 4,
],
زد عدد threads بناءً على وحدة المعالجة المتاحة — راقب استخدام الذاكرة؛ فهرسة الأسعار تستهلك ذاكرة كثيفة.
3. العمليات المجمعة: استخدم Bulk API
للاستيرادات الكبيرة، استخدم Bulk API في Magento أو إجراءات الكتلة Magento_Indexer بدلاً من حفظ المنتجات واحدًا تلو الآخر في لوحة الإدارة. كل حفظ يشغل كتابات changelog؛ العمليات المجمعة تقلل الحمل.
4. عمال مفهرس منفصلون (Adobe Commerce / إعداد مخصص)
في المتاجر عالية الحجم، شغل عامل cron مخصص لمجموعة index:
bin/magento cron:run --group=index --bootstrap=standaloneProcessStarted=1
هذا يمنع مهام المفهرس من التنافس مع مهام معالجة الطلبات.
5. راقب الأعمال المتراكمة كمقياس
نبه عندما تتجاوز جداول changelog حدًا (مثال 10,000 صف). الأعمال المتراكمة المتزايدة هي تحذير مبكر قبل أن يرى العملاء بيانات قديمة.
أفضل الممارسات للإنتاج
- استخدم دائمًا التحديث حسب الجدول — أبدًا التحديث عند الحفظ في المتاجر المباشرة.
- أعد الفهرسة بعد النشر الذي يمس
di.xmlأو قواعد الأسعار أو تكوين السمات. - لا تشغل أبدًا
indexer:reindexخلال أوقات الذروة إلا للضرورة — جدول نوافذ الصيانة. - تحقق من أن cron يعمل — فشل cron الصامت هو السبب الأول لبيانات المتجر القديمة.
- تحقق من حالة المفهرسات بعد الاستيرادات الكبيرة — وحدات الاستيراد غالبًا ما تتخطى إعادة الفهرسة التلقائية.
- حافظ على صحة Elasticsearch/OpenSearch — إخفاقات مفهرس البحث تتتالى إلى صفحات SERP فارغة.
- سجل ونبه على حالة
Reindex required— عاملها كحادث إنتاجي لمتاجر الكتالوج.
قائمة التحقق بعد النشر
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f
bin/magento indexer:reindex
bin/magento cache:flush
bin/magento indexer:status
الأسئلة الشائعة التقنية
كم مرة يجب أن تعمل المفهرسات؟
مع التحديث حسب الجدول، مجموعة cron index تعالج changelogs كل دقيقة. إعادة الفهرسة الكاملة مطلوبة فقط بعد تغييرات بيانات كبيرة أو عندما تظهر الحالة Reindex required.
هل cache:flush يحل محل إعادة الفهرسة؟
لا. مسح ذاكرة التخزين المؤقت يمسح ذاكرة التخزين المؤقت للكتل/FPC/الإعدادات. المفهرسات تعيد بناء الجداول المسطحة وفهارس البحث — أنظمة منفصلة تمامًا.
هل يمكنني تعطيل مفهرس لا أستخدمه؟
بعض المفهرسات (مثال design_config_grid) خاصة بلوحة الإدارة وذات تأثير منخفض. لا تعطل أبدًا catalog_product_price أو cataloginventory_stock أو catalogsearch_fulltext على متجر مباشر.
لماذا تستهلك إعادة الفهرسة الكثير من الذاكرة؟
مفهرسات الأسعار وقواعد الكتالوج تحمل مجموعات منتجات كبيرة في الذاكرة. زد memory_limit لـ PHP لـ CLI (مثال -d memory_limit=2G) واستخدم الخيوط المتوازية بحذر.
ما الفرق بين indexer:reset و cache:clean؟
indexer:reset يحدد المفهرس كـ غير صالح لتبدأ إعادة الفهرسة التالية من الصفر. cache:clean يمسح فقط الكتل والتكوين المخبأ — لا يعيد بناء جداول الفهرس.
الخلاصة
مفهرسات Magento 2 هي العمود الفقري لأداء المتجر ودقة البيانات. تعامل مع التحديث حسب الجدول + cron سليم كأمر غير قابل للتفاوض في الإنتاج، وراقب الأعمال المتراكمة في changelog، واعرف كيفية إعادة تعيين المفهرسات العالقة قبل أن تؤثر على العملاء.
هل تحتاج مساعدة في تحسين المفهرسات أو حل أزمة فهرسة في الإنتاج؟ تواصل معي — أعمل مع متاجر Magento 2 و Adobe Commerce في مجال تحسين الأداء و DevOps وتطوير الوحدات المخصصة.