2012-05-12 4 views
4

Я искал какое-то время, а затем this ответ даже посмотрел на сценарий индексатора оболочки, и я пришел с этим. В принципе, у меня естьMagento правильно переиндексировать все

$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_MANUAL)); 
$processes->walk('save'); 

// Importing data here... 

Mage::getModel('catalog/product_image')->clearCache(); 

// rebuild everything!!! 
$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
$processes->walk('reindexEverything'); 
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_REAL_TIME)); 
$processes->walk('save'); 

Но я все еще получаю этот экран в моем внутреннем интерфейсе

enter image description here

... Как "обновить" индексы?

** UPDATE **

Проблема решена!

Чтобы правильно проиндексировать все, просто позвоните всем!

// rebuild everything!!! 
$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_REAL_TIME)); 
$processes->walk('save'); 

$processes->walk('reindexAll'); 
$processes->walk('reindexEverything'); 

ответ

3

При запуске indexer.php из кли, используя следующие параметры, сделать сигналы становятся постановили:

indexer.php reindex all

Если да, то выполняется indexer.php с тем Params в рамках ваш скрипт вариант?

Редактировать: также, в Mage_Index_Model_Process Посмотрите на reindexEverything() метод.

indexer.php имеет пример его использования.

+0

посмотрите на indexer.php и, пожалуйста, скажите мне, что есть в нем, что я не в моем коде? Это то, что я хочу знать; почему я не могу повторно индексировать все правильно в моем собственном сценарии? –

+0

OK Я вижу ... хм Вы видели этот ответ? http://stackoverflow.com/a/4343900/634843 Вы пытались использовать reindexAll() вместо reindexEverything()? – djdy

+0

Да, я попробовал оба. И, честно говоря, я понятия не имею, в чем разница между ними обоими; Я имею в виду, не оба термина «все» <==> «все» так же ?? –

2

Я только столкнулся с этой проблемой в CE v1.9.0.1. Мой админ-модуль получал все процессы в виде коллекции и перебирал все вызовы reindexEverything(). Я основал код на контроллере процессов adminhtml, который работал нормально, но мой код не работал вообще.

я наконец понял, проблема в том, что я уже установлен режим переиндексации в ручной режим (чтобы ускорить свою рутину импорта продукта) следующим образом:

$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_MANUAL)); 


// run product import 


$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
foreach($processes as $p) 
{ 
    if($p->getIndexer()->isVisible()) 
    { 
     $p->reindexEverything(); 
     //echo $p->getIndexer()->getName() . ' reindexed<br>'; 
    } 
} 



$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_REAL_TIME)); 

РЕШЕНИЕ: Установка режима обратно в MODE_REAL_TIME перед тем переиндексации все :

$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_MANUAL)); 


// run product import 


$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_REAL_TIME)); 



$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
foreach($processes as $p) 
{ 
    if($p->getIndexer()->isVisible()) 
    { 
     $p->reindexEverything(); 
     //echo $p->getIndexer()->getName() . ' reindexed<br>'; 
    } 
} 

Примечание: эти надрезы из нескольких различных методов, следовательно, повторное назначение в $ процессов и т.д ..

казалось г eindexEverything() ничего не делал, когда индексный режим процессов был установлен в MODE_MANUAL. Возврат к MODE_REAL_TIME и последующий вызов reindexEverything работал нормально.

Я надеюсь, что это поможет кому-то, поскольку у меня было несколько разочаровывавших часов, когда вы это выяснили!

Благодаря

+0

Да, поэтому я добавил ** обновление ** к вопросу с помощью фрагмента моего рабочего решения на основе выбранного ответа. Ваш ответ объясняет, почему. Благодарю. (BTW: '' save'' часть - очистить все в кеше до переиндексации.) –

Смежные вопросы