Magento正确地重新索引一切

时间:2012-05-12 02:16:32

标签: magento indexing

我已经搜索了一段时间,接着this回答了甚至查看了shell索引器脚本,我带来了这个。基本上,我有

$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

...如何“更新”索引?

** 更新 **

问题解决了!

要正确索引所有内容,只需调用所有内容!

// 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');

2 个答案:

答案 0 :(得分:2)

如果您使用以下参数从cli运行indexer.php,则会解决警报:

indexer.php reindex all

如果是这样,执行indexer.php并将这些params作为脚本的一部分选项?

修改:同样,在Mage_Index_Model_Process中查看reindexEverything()方法。

indexer.php有一个使用它的例子。

答案 1 :(得分:2)

我刚在CE v1.9.0.1中遇到过这个问题。我的管理模块将所有进程作为一个集合进行循环,并在每个进程中循环调用reindexEverything()。我将代码基于adminhtml进程控制器,该控制器工作正常,但我的代码根本没有工作。

我终于弄清楚问题是我之前将reindex模式设置为手动(以加快我的产品导入例程),如下所示:

$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>';
    }
}

注意:这些是来自几种不同方法的剪辑,因此重复分配$进程等。

当进程索引模式设置为MODE_MANUAL时,似乎reindexEverything()没有做任何事情。将模式设置回MODE_REAL_TIME,然后调用reindexEverything工作正常。

我希望这对某人有所帮助,因为我有一些沮丧的时间来解决这个问题!

由于