我已经搜索了一段时间,接着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');
但我仍然在我的后端获得此屏幕
...如何“更新”索引?
** 更新 **
问题解决了!
要正确索引所有内容,只需调用所有内容!
// 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');
答案 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工作正常。
我希望这对某人有所帮助,因为我有一些沮丧的时间来解决这个问题!
由于