Magento:“不能重新索引。”

时间:2011-06-14 09:49:51

标签: magento indexing reporting

我的“类别产品”索引存在问题。它根本不会重新索引。错误开始的时候我在1.4,现在我已经1.5了,它仍然存在。

我试过了:

  1. 使用magento数据库修复工具修复数据库
  2. 清除var,所有缓存,锁定,会话
  3. 确保所有权限都正确。
  4. 撕掉我的头发。
  5. 无论如何,我可以进一步调查这个问题吗?错误日志没有记下这个问题,我有点在黑暗中。任何帮助都会非常非常感激。

    编辑:在收到错误消息后,我得到:报告! SQLSTATE [21S01]:插入值列表与列列表不匹配:1136列数与第1行的值计数不匹配。

    编辑2:我运行查询日志并拥有以下信息。如果你不介意看一看是否有一个解决方案,我会非常高兴。它略微凌驾于我的脑海......

    [2011-06-14 12:33:26] SQL: SELECT DISTINCT `catalog_product_bundle_selection`.`parent_product_id` FROM `catalog_product_bundle_selection` WHERE (product_id IN('180'))
    EXCEPTION 
    exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1' in /my-domain.com/lib/Zend/Db/Statement/Pdo.php:234
    Stack trace:
    #0 /my-domain.com/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
    #1 /my-domain.com/lib/Zend/Db/Adapter/Abstract.php(468): Zend_Db_Statement->execute(Array)
    #2 /my-domain.com/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO cat...', Array)
    #3 /my-domain.com/lib/Varien/Db/Adapter/Pdo/Mysql.php(335): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO cat...', Array)
    #4 /my-domain.com/app/code/core/Mage/Index/Model/Mysql4/Abstract.php(159): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO cat...')
    #5 /my-domain.com/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Category/Indexer/Product.php(522): Mage_Index_Model_Mysql4_Abstract->insertFromSelect('SELECT?        ...', 'catalog_categor...', Array)
    #6 /my-domain.com/app/code/core/Mage/Index/Model/Indexer/Abstract.php(125): Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Indexer_Product->reindexAll()
    #7 /my-domain.com/app/code/core/Mage/Index/Model/Process.php(139): Mage_Index_Model_Indexer_Abstract->reindexAll()
    #8 /my-domain.com/app/code/core/Mage/Index/Model/Process.php(167): Mage_Index_Model_Process->reindexAll()
    #9 /my-domain.com/app/code/core/Mage/Index/controllers/Adminhtml/ProcessController.php(124): Mage_Index_Model_Process->reindexEverything()
    #10 /my-domain.com/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Index_Adminhtml_ProcessController->reindexProcessAction()
    #11 /my-domain.com/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('reindexProcess')
    #12 /my-domain.com/app/code/core/Mage/Core/Controller/Varien/Front.php(177): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
    #13 /my-domain.com/app/code/core/Mage/Core/Model/App.php(304): Mage_Core_Controller_Varien_Front->dispatch()
    #14 /my-domain.com/app/Mage.php(596): Mage_Core_Model_App->run(Array)
    #15 /my-domain.com/index.php(81): Mage::run('', 'store')
    #16 {main}
    

    编辑3:查询本身!

    SQL:

    INSERT INTO catalog_category_anc_products_index_idx 
    SELECT STRAIGHT_JOIN DISTINCT ca.category_id, cp.product_id
    FROM catalog_category_anc_categs_index_idx AS ca
        INNER JOIN catalog_category_entity AS ce
            ON ce.path LIKE ca.path OR ce.entity_id = ca.category_id
        INNER JOIN catalog_category_product AS cp
            ON cp.category_id = ce.entity_id
        INNER JOIN catalog_category_product_index_enbl_idx as pv
            ON pv.product_id = cp.product_id
    

4 个答案:

答案 0 :(得分:4)

此错误-always-表示在索引进程的某处抛出了异常。

要验证,请检查以下文件中的方法'reindexProcessAction':

应用程序/代码/核心/法师/索引/控制器/ Adminhtml / ProcessController.php

请在第二个catch块中回显并死掉$ e-> getMessage()并报告回来;)

EDIT1:

关于你的例外,根据谷歌,这可能是由于PHP特定于语言环境的floatval格式化...试着把:

setlocale(LC_ALL, 'en_EN'); 

位于index.php文件的顶部。其他人建议您将System-> Configuration-> General-> Locale设置为'English'。

EDIT2:

这是1.4.x.x中的一个错误,如果你想要一个正确的解决方案 - 为了上帝之爱更新你的安装! :)

这是核心文件app / code / core / Mage / Catalog / Model / Resource / Eav / Mysql4 / Category / Indexer / Product.php

的非常讨厌的补丁

http://pastebin.com/fWYTsYuX

从1.5开始向后移植。希望它可以帮到某人。

答案 1 :(得分:1)

Magento,有时可能很奇怪。尝试关闭DEVELOPER_MODE(在.htaccess或index.php中)并重新索引。这对我有帮助。

答案 2 :(得分:0)

检查您是否没有任何产品缺少SKU。您可以从“管理产品”中执行此操作,然后单击SKU列以将空白置于顶部。删除它们或指定SKU,看看重新索引是否有效。

答案 3 :(得分:0)

经过几个小时的努力,我终于找到了解决方案。事实上,这是一个非常简单的解决方案:

  • 备份数据库
  • 打开phpMyAdmin并truncate(清空)表catalog_product_flat_1

就是这样。之后,我能够索引所有数据,直到现在,其他一切工作都很完美。这对我有用。我希望它也适合你。