4

私はしばらく検索しましたが、この回答に続いて、シェルインデクサースクリプトも見て、これにたどり着きました。基本的に、私は持っています

$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 に答える