Magento扁平化产品

5
当尝试启用并重新索引产品平面数据时,从Magento中获得错误。
“平面目录”模块有限制,最多只能有64个可过滤和/或可排序属性。当前有521个。请减少可过滤/可排序属性的数量以使用此模块。
我无法理解这是什么意思,以及Magento从何处获取这些值。在属性中,我只有321个不同的属性,因此Magento从哪里获取当前使用的521个值,以及它取得了其中64个的限制??
谢谢。

好奇 - 这个问题解决了还是有其他方法来解决? - Laizer
2个回答

5

当您的产品数量超过

Mage_Catalog_Model_Resource_Product_Flat_Indexer::prepareFlatTable()

方法会抛出此异常:

<global>
    <catalog>
        <product>
            <flat>
                <max_index_count>64</max_index_count>
            </flat>
        </product>
    </catalog>
</global>

索引。这个最大值通常在app/code/core/Mage/Catalog/etc/config.xml中定义,并且与默认mySQL安装允许的64个键的最大数量相匹配,否则他们会报错。

ERROR 1069: Too many keys specified. Max 64 keys allowed

您的问题不在于产品有多少属性,而在于有多少个属性是可过滤和/或可排序的(当然,如果所有属性都是,则除外)。

跟踪Mage_Catalog_Model_Resource_Product_Flat_Indexer :: getFlatIndexes()以找出Magento如何达到521个索引的总数。

为了快速检查,您还可以查看您的catalog_eav_attribute表,并检查有多少个属性是可过滤的(is_filterable = 1)和/或可排序的(used_for_sort_by = 1)


感谢提示 - 我会尝试更改MySQL参数并优化属性。 - Sergey
嗨,如果我们将数据库表的最大索引计数增加到80或100,可能会有什么影响?https://dba.stackexchange.com/questions/249472/implication-in-increasing-mysql-maximum-keys-allowed-per-table - Haijerome

4
您所遇到的错误来自以下文件: /app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Flat|Indexer.php。
看起来,这个限制设置在目录config.xml文件中,该文件位于以下位置: /app/code/core/Mage/Catalog/etc|config.xml。
查找“max_index_count”,您会发现该值设置为64。
我不确定为什么有此限制,但我想他们肯定有很好的理由将其设置为64。在开发环境下(在您了解可能发生的情况之前,请勿在实时站点上尝试此操作),您可以更改此值并查看结果。
您拥有的索引数量(521)来自Indexer.php文件中的getFlatIndexes函数。 我猜测您获得521是因为您有321 + Magento默认使用的一些其他索引。
如果我必须猜测,那么这个限制是为了防止平面目录表在水平上变得太大。 当表格过大时,我猜测会出现速度问题。

谢谢 - 我会尝试使用这些参数进行实验。 - Sergey
你好,如果我们将目录产品平面表的最大索引计数增加到80或100,可能会有什么影响?https://dba.stackexchange.com/questions/249472/implication-in-increasing-mysql-maximum-keys-allowed-per-table - Haijerome

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