Magento产品平面数据不会重新索引

时间:2012-01-24 16:26:22

标签: shell magento

我的产品平面索引存在问题而不是重新索引,它只会继续处理。我进去并使用indexer.php在shell中运行reindex。

我得到一个我不理解的错误,有人可以帮助我吗?

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 个答案:

答案 0 :(得分:10)

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

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

一旦进入'shell'目录,该命令应如下所示 php indexer.php --reindex catalogsearch_fulltext

答案 1 :(得分:3)

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

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

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

为我修好了!

答案 2 :(得分:1)

嘿,我遇到了同样的问题而没有修复它。使用Mage 1.7,我只需转到admin / system / configuration / catalog然后“frontend”,将Use Flat Catalog Product切换为“Yes”。 Reindex工作。然后回到那里,将其切换回“否”。再次重新注入,它起作用了。希望它有所帮助:D

PS:我不知道它是否相关,但我确实截断了catalog_product_fat表,并且之前清空了var文件夹(除非我做了什么,否则它没有改变任何东西,所以)

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

答案 3 :(得分:0)

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

在“在产品列表中使用”中将除neccessery属性之外的所有属性设置为“no”是一件痛苦的事情,但是,在我完成后5分钟,平面表创建没有错误。因此,在你去桌子并要求你主持shell访问等之前,看看你是否犯了与我相同的错误,当我第一次开店时回来。

答案 4 :(得分:0)

我刷新了缓存存储,谢天谢地,reindex为我工作了。

答案 5 :(得分:0)

Fixing this

In order to fix this issue, you need to find what the corrupted entries are. This is easy. In this case, you’ll need to create a query to get the empty registers:

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

This will display the corrupted entities. You only need to delete them and that’s all.

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

As example:

DELETE FROM catalog_product_flat_2 where entity_id = '35427';