4

我已经搜索了一段时间,遵循了这个答案,甚至查看了 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');

但我仍然在我的后端得到这个屏幕

在此处输入图像描述

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

**更新**

问题解决了!

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

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

2 回答 2

2

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

indexer.php reindex all

如果是这样,将这些参数作为脚本的一部分执行 indexer.php 是一种选择吗?

编辑:另外,Mage_Index_Model_Process看看reindexEverything()方法。

indexer.php有一个使用示例。

于 2012-05-12T02:20:32.530 回答
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>';
    }
}

注意:这些是来自几种不同方法的片段,因此重复分配 $processes 等。

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

我希望这对某人有所帮助,因为我花了几个沮丧的时间才弄清楚这一点!

谢谢

于 2014-08-03T18:21:43.220 回答