Magento正确地重新索引所有内容

Magento正确地重新索引所有内容,magento,indexing,Magento,Indexing,我已经搜索了一段时间,跟踪了答案,甚至看了shell indexer脚本,我带了这个。基本上,我有 $processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); $processes->walk('setMode', array(Mage_Index_Model_Process::MODE_MANUAL)); $processes->walk('save'); // Importing

我已经搜索了一段时间,跟踪了答案,甚至看了shell indexer脚本,我带了这个。基本上,我有

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

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

indexer.php全部重新编制索引

如果是这样,那么在脚本中使用这些参数执行indexer.php是否是一个选项

编辑:另外,在
Mage\u Index\u Model\u过程中
查看
reindexearthing()
方法


indexer.php
有一个使用示例。

我刚刚在CEV1.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));
$processs=Mage::getSingleton('index/indexer')->getProcessCollection();
$processs->walk('setMode',数组(Mage_Index_Model_Process::MODE_MANUAL));
//运行产品导入
$processs=Mage::getSingleton('index/indexer')->getProcessCollection();
foreach($p处理)
{
如果($p->getIndexer()->isVisible())
{
$p->reindexEverything();
//echo$p->getIndexer()->getName()。“重新编制索引
”; } } $processs=Mage::getSingleton('index/indexer')->getProcessCollection(); $processs->walk('setMode',数组(Mage_Index_Model_Process::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>';
    }
}
$processs=Mage::getSingleton('index/indexer')->getProcessCollection();
$processs->walk('setMode',数组(Mage_Index_Model_Process::MODE_MANUAL));
//运行产品导入
$processs=Mage::getSingleton('index/indexer')->getProcessCollection();
$processs->walk('setMode',数组(Mage_Index_Model_Process::MODE_REAL_TIME));
$processs=Mage::getSingleton('index/indexer')->getProcessCollection();
foreach($p处理)
{
如果($p->getIndexer()->isVisible())
{
$p->reindexEverything();
//echo$p->getIndexer()->getName()。“重新编制索引
”; } }
注意:这些是一些不同方法的剪报,因此重复分配$processs等

当进程索引模式设置为手动模式时,reindexEverything()似乎什么都没有做。将mode设置回mode_REAL_TIME,然后调用reIndex一切正常

我希望这有助于一些人,因为我有几个小时沮丧地弄明白这一点


谢谢

看看indexer.php,请告诉我代码中没有的内容是什么?这就是我想知道的;为什么我不能在自己的脚本中正确地重新索引所有内容?好的,我明白了。。。嗯,你看到这个答案了吗?您是否尝试过使用reindexAll()而不是reindexEverything()?是的,我两者都试过。坦率地说,我不知道他们之间有什么区别;我的意思是,这两个术语“all”和“everything”不是都一样吗?在转到reindexAll()之前,reindexEverything()似乎要检查并使用depends。我现在可能没有主意了。很抱歉不过,我会再考虑一下,如果我有什么想法,我会发布。是的,这就是为什么我在这个问题上添加了一个更新,根据所选答案,添加了我的工作解决方案片段。你的回答解释了原因。谢谢(顺便说一句,
“保存”
部分是在重新索引之前刷新缓存中的所有内容。)