Ответ 1
Ваше предположение: "Похоже, что некоторые действия индексирования выведены в очередь". Правильно.
Чтобы ответить на ваш вопрос "но когда он выполняется?":
Некоторые модели Magento, например
Mage_Core_Model_Store
Mage_Catalog_Model_Product
Mage_Catalog_Model_Category
Mage_CatalogInventory_Model_Stock_Item
Mage_Tag_Model_Tag
Mage_Tag_Model_Tag_Relation
например, события индекса очереди. В основном перед удалением и/или после совершения.
Они делают это путем вызова метода logEvent()
или processEntityAction()
класса Mage_Index_Model_Indexer
.
-
Если они вызывают
logEvent()
напрямую, событие индекса будет только поставлено в очередь. Реиндексирование даже не будет проверено. -
Если они вызовут
processEntityAction()
, событие индекса будет поставлено в очередь, но Magento попытается обработать это событие индекса после очередей.
Также третий модуль Mage_Index_Model_Indexer::indexEvents()
вызывается некоторыми модулями. Разница с предыдущими двумя заключается в том, что indexEvents()
не ставит в очередь какое-либо событие индекса, но будет пытаться сразу переиндексировать.
Обратите внимание, что любое переиндексирование через processEntityAction()
и indexEvents()
произойдет только в том случае, если режим процесса соответствующего типа индекса Mage_Index_Model_Process::MODE_REAL_TIME
.
Вы можете проверить это через System -> Index Management
. Если столбец Mode
читает "Обновление при сохранении", значение этого индекса равно MODE_REAL_TIME
.
Если вместо этого он читает "Обновление вручную", он устанавливается на Mage_Index_Model_Process::MODE_MANUAL
, что означает, что автоматическое переиндексация никогда не произойдет вообще.
В последнем случае вам нужно вручную запустить процессы переиндексации, чтобы ваши данные были повторно проиндексированы. Это может быть достигнуто с использованием нескольких способов, например. с помощью System -> Index Management -> Index -> Reindex data -> Submit
или с помощью Magento shell/indexer.php
в командной строке или путем написания собственной обработки процесса обработки индексатора, запускаемой заданием cron.