【问题标题】:Magento Product Flat Data will not reindexMagento 产品平面数据不会重新索引
【发布时间】:2012-01-24 16:26:21
【问题描述】:

我的产品平面索引没有重新编制索引时遇到问题,它只会继续处理。我进入并使用 indexer.php 通过 shell 运行重新索引。

我遇到了一个我有点不明白的错误,有人可以帮助我吗?

Product Flat Data index process unknown error:
exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`sprayfoa_store`.<result 2 when explaining filename '#sql-66c_ab044'>, CONSTRAINT `FK_CAT_PRD_FLAT_1_ENTT_ID_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`entity_id`) REFERENCES `catalog_product_entity`)' in /home/sprayfoa/public_html/store/lib/Zend/Db/Statement/Pdo.php:228
Stack trace:
#0 /home/sprayfoa/public_html/store/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array)
#1 /home/sprayfoa/public_html/store/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
#2 /home/sprayfoa/public_html/store/lib/Zend/Db/Statement.php(300): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
#3 /home/sprayfoa/public_html/store/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#4 /home/sprayfoa/public_html/store/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('ALTER TABLE `ca...', Array)
#5 /home/sprayfoa/public_html/store/lib/Varien/Db/Adapter/Pdo/Mysql.php(389): Zend_Db_Adapter_Pdo_Abstract->query('ALTER TABLE `ca...', Array)
#6 /home/sprayfoa/public_html/store/lib/Varien/Db/Adapter/Pdo/Mysql.php(327): Varien_Db_Adapter_Pdo_Mysql->query('ALTER TABLE `ca...')
#7 /home/sprayfoa/public_html/store/lib/Varien/Db/Adapter/Pdo/Mysql.php(2548): Varien_Db_Adapter_Pdo_Mysql->raw_query('ALTER TABLE `ca...')
#8 /home/sprayfoa/public_html/store/app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php(806): Varien_Db_Adapter_Pdo_Mysql->addForeignKey('FK_CAT_PRD_FLAT...', 'catalog_product...', 'entity_id', 'catalog_product...', 'entity_id', 'CASCADE', 'CASCADE')
#9 /home/sprayfoa/public_html/store/app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php(125): Mage_Catalog_Model_Resource_Product_Flat_Indexer->prepareFlatTable(1)
#10 /home/sprayfoa/public_html/store/app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php(115): Mage_Catalog_Model_Resource_Product_Flat_Indexer->rebuild('1')
#11 /home/sprayfoa/public_html/store/app/code/core/Mage/Catalog/Model/Product/Flat/Indexer.php(73): Mage_Catalog_Model_Resource_Product_Flat_Indexer->rebuild(NULL)
#12 /home/sprayfoa/public_html/store/app/code/core/Mage/Catalog/Model/Product/Indexer/Flat.php(303): Mage_Catalog_Model_Product_Flat_Indexer->rebuild()
#13 /home/sprayfoa/public_html/store/app/code/core/Mage/Index/Model/Process.php(159): Mage_Catalog_Model_Product_Indexer_Flat->reindexAll()
#14 /home/sprayfoa/public_html/store/app/code/core/Mage/Index/Model/Process.php(187): Mage_Index_Model_Process->reindexAll()
#15 /home/sprayfoa/public_html/store/shell/indexer.php(158): Mage_Index_Model_Process->reindexEverything()
#16 /home/sprayfoa/public_html/store/shell/indexer.php(198): Mage_Shell_Compiler->run()
#17 {main}

【问题讨论】:

    标签: shell magento


    【解决方案1】:

    我找到了解决自己问题的方法。

    使用 phpMyAdmin 在 Magento 数据库中找到 catalog_product_flat_1 表。然后清空(截断)该表,然后使用 Magento 安装根目录中 shell 目录中的 indexer.php 脚本,通过 SSH 重新索引 Catalog Search Index。

    进入“shell”目录后,该命令应如下所示 php indexer.php --reindex catalogsearch_fulltext

    【讨论】:

      【解决方案2】:

      catalog_product_flat_# 表是一个平面表,其中包含来自 EAV 产品目录表的数据。 如果您在重新索引目录时遇到问题,请截断(删除内容)该表并重新索引您的数据。

      当您删除某些信息时,Magento 似乎没有清理该表。

      在我的情况下,该表充满了旧的已删除产品。

      帮我修好了!

      【讨论】:

        【解决方案3】:

        嘿,我遇到了同样的问题,但没有解决它。使用 Mage 1.7 ,我只需转到 admin/system/configuration/catalog 然后“前端”,将使用平面目录产品切换为“是”。重新索引工作。然后回到那里,将其切换回“否”。再次重新索引,它起作用了。希望对你有帮助:D

        PS:我不知道它是否相关,但我之前确实截断了 catalog_product_fat 表,并清空了 var 文件夹(它没有改变任何东西,直到我做了那里的事情,tho)

        PS 2:问题最初是在我的 Reindex 超时后发生的。

        【讨论】:

          【解决方案4】:

          我遇到了同样的问题,因为我没有 shell 访问权限,所以直到下周我才尝试解决它。一个错误迫使我解决问题。我已经尝试了每个人所说的,放下桌子等:它没有用。对我来说诀窍是这样的: 创建平面表是为了加快商店的速度。一些(但不是全部)属性存储在平面表中。但是,所有“在产品列表中使用”=“是”的属性都存储在表中。我们有很多属性(我们使用它们来显示我们产品的规格),并且很明显,它们都设置为用于产品列表。问题是因为我们有很多不同的属性,所以平板会变得很大。

          在“用于产品列表”中将除必需属性之外的所有属性设置为“否”是一件很痛苦的事情,但是,在我完成 5 分钟后,平板电脑的创建没有错误。因此,在您放下桌子并要求您提供 shell 访问权限等之前,看看您是否没有犯与我第一次设置商店时相同的错误。

          【讨论】:

            【解决方案5】:

            我刷新了缓存存储,幸好重新索引对我有用。

            【讨论】:

              【解决方案6】:

              解决这个问题

              为了解决这个问题,您需要找出损坏的条目是什么。这很简单。在这种情况下,您需要创建一个查询来获取空寄存器:

              SELECT a.entity_id FROM catalog_product_flat_2 AS a LEFT JOIN catalog_product_entity AS b ON a.entity_id = b.entity_id WHERE ISNULL(b.entity_id);
              

              这将显示损坏的实体。你只需要删除它们 仅此而已。

              +-----------+
              | entity_id |
              +-----------+
              |     35427 |
              |     35428 |
              +-----------+
              2 rows in set (0.04 sec)
              

              例如:

              DELETE FROM catalog_product_flat_2 where entity_id = '35427';
              

              【讨论】:

                猜你喜欢
                • 2023-03-07
                • 2013-08-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多