Magento产品平面数据无法重新索引

3
我遇到了产品平板索引不重建的问题,它一直在处理中。我通过shell运行了indexer.php进行了重新索引。
然而,我遇到了一个我无法理解的错误,请有经验的人帮助我解决这个问题。
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}
6个回答

11

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

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

一旦你进入 'shell' 目录,命令应该看起来像这样:php indexer.php --reindex catalogsearch_fulltext


3
catalog_product_flat_#表是一个平面表,包含来自EAV产品目录表的数据。 如果您在重建目录时遇到问题,请清空该表(删除内容)并重新索引数据。 看起来Magento在删除一些信息时没有清理该表。 在我的情况下,该表中充满了已删除的旧产品。 对我有用的解决方法!

1

嘿,我遇到了同样的问题,但是没有什么解决方法。使用Mage 1.7版本,我只需进入admin/system/configuration/catalog然后选择"frontend",将"Use Flat Catalog Product"切换为"Yes"。重新索引即可解决问题。然后再切换回"no",再次重新索引,问题得以解决。希望能有所帮助:D

PS:我不知道是否相关,但在执行上述操作之前,我已经截断了catalog_product_fat表,并清空了var文件夹(尽管这些操作没有改变任何东西)。

PS2:问题最初发生是因为我的重新索引超时了。


0

修复此问题

为了解决这个问题,您需要找出哪些条目已损坏。这很容易。在这种情况下,您需要创建一个查询来获取空寄存器:

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

0

我清除了缓存存储,幸运的是重新索引成功了。


0
我曾经遇到过同样的问题,因为我没有shell访问权限,所以我没有尝试解决它,直到下周。一个错误迫使我解决这个问题。我尝试了所有人说的方法,删除表格等等:都不起作用。对我有用的是这个技巧:
平面表格是为了加快商店速度而创建的。一些属性存储在平面表中,但并非全部属性。然而,所有具有“在产品列表中使用”=“是”的属性都存储在表格中。我们有很多属性(我们用它们来显示产品规格),显然,它们都被设置为在产品列表中使用。问题是,由于我们有很多不同的属性,平面表会变得太大。
将除必要属性之外的所有属性设置为“否”,在“产品列表中使用”上是很痛苦的,但是,在我完成后5分钟内,平面表格就被创建了,没有出现错误。因此,在您放弃表格并要求主机提供shell访问权限之前,请查看是否犯了与我最初设置商店时相同的错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接