ターゲットルールのアップセル


9

Magentoターゲットルールのアップセルに奇妙な問題があります。

シナリオ:Magento EE 1.12。同じMagentoインスタンスで30以上のストアビュー。30k以上の製品。ほとんどの製品は、すべてのストアビューで同じ設定になっています。アップセルを表示するためのルールを次のように作成しました。「現在の製品よりも価格が100%以上高い同じカテゴリの製品を表示する」。アップセルを表示するための設定:「ルールベースのみ」(問題は「ルールベースおよび選択済み」で再現)。ルールを保存しました。すべてのインデックスを再作成しました。すべての縫い目が問題なく見えるようになり、アップセルが(テストした製品の)ルールで定義されているように表示されます。製品は、すべてのストアビューで同じ設定を持っています。(そして、それは同じアップセルを持つべきです。)

ルールの一部を変更して再度保存すると、アップセルがすべてのストアビューに表示され始めますが、しばらくすると問題が再現します。

コードを掘り下げた後、ターゲットルールによって生成されたアップセルがすべてのルールを毎回解析しないように、テーブルenterprise_targetrule_index_upsellに保持されていることがわかりました。これがどのように機能するかです。(ルールを保存すると、テーブルが切り捨てられます)前述のテーブルに「ターゲットルール」のアップセルがある場合、それらが取得されます。そうでない場合は、ルールが解析され、結果がインデックステーブルに格納されます。以下は、特定の製品のそのテーブルのレコードです。

+-----------+----------+-------------------+---------------------------------------------------------------------+---------------------+
| entity_id | store_id | customer_group_id | product_ids                                                         | customer_segment_id |
+-----------+----------+-------------------+---------------------------------------------------------------------+---------------------+
|     17372 |        2 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |
|     17372 |        5 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |
|     17372 |       17 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |
|     17372 |       18 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |
|     17372 |       19 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |
|     17372 |       20 |                 0 |                                                                     |                   0 |
|     17372 |       21 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |
|     17372 |       22 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |
|     17372 |       23 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |

ご覧のとおり、IDが17372の製品のアップセルは、空白のstore_id 20を除いて、すべてのストアビューですべて同じです。ストア20について特別なことは何もありません。ここに含まれるすべての製品は、すべてのストアで入手できます。

何か案が?

ありがとう。マリウス。


1
cron正しく構成されていますか。IIRCルールは毎晩再構築され、アクティブでないcronと奇妙な動作が発生します
ベンレッサーニ-ソナッシ

cronはアクティブで、問題なく毎朝実行されます。
マリウス

他に1つ見つかりました。ルールを保存すると、テーブル 'enterprise_targetrule_product'にすべての製品が含まれますが、しばらくするとすべての製品がなくなりますが、常に同じではありません。製品IDが上記の表にある限り、すべてが機能します。
マリウス

1
製品を保存すると、その製品のターゲットルールにインデックスが付けられ、最終的に次のようになります。 -> quoteInto($ entityInfo ['rule_id_field']。 'IN(?)AND'、$ ruleIds)。$ adapter-> quoteInto($ entityInfo ['entity_id_field']。 'NOT IN(?)'、$ entityIds); 。私は、再生されていない「手動」問題へのtargetruleインデックスのためのモードを設定した場合、これは、影響を受ける製品の一覧から他のすべての製品を削除します。しかし、これはそれを解決しません。それはちょうどそれを隠す。。。
マリウス

誰かがこれに反対する理由はありますか?
FlorinelChis 2013年

回答:


7

EE 1.13では、このバグは修正されているようです(ただし、EE 1.13はなくなりました)。

Enterprise_TargetRule_Model_Resource_Index::saveProductIndex、問題のある行が(ヒント:4番目のパラメーター "false")に置き換えられました

$targetRule->bindRuleToEntity($ruleId, $productId, 'product', false);

Mage_Rule_Model_Resource_Abstract、関数bindRuleToEntityが次のように変更されました。

public function bindRuleToEntity($ruleIds, $entityIds, $entityType, $deleteOldResults = true)

そしてライン$adapter->delete(...)はに包まれました

if ($deleteOldResults) {
    $adapter->delete($this->getTable($entityInfo['associations_table']),
           $adapter->quoteInto($entityInfo['rule_id_field']   . ' IN (?) AND ', $ruleIds) .
           $adapter->quoteInto($entityInfo['entity_id_field'] . ' NOT IN (?)',  $entityIds)
    );
 }

別のバグ、shell / indexer.php --reindex targetruleは何もしないので、cron / consoleを介してインデックスを再作成することはできません。追加して修正してEnterprise_TargetRule_Model_Indexください:

public function reindexAll() {
    return $this->_getResource()->cleanIndex();
}

後で:このパッチを参照してくださいhttps://github.com/magendooro/targetrulefix


私は1.13.1を使用していますが、Integrity constraint violation:for key '5B1C775075460366570ABDA2839BC68A'->このキーはenterprise_targetrule_index_related... から来ています...上記の変更に関連しているかどうかはわかりますか?
Fra

1

この質問に未回答のマークが付けられないように、見つけたものを回答として追加することにしました。

製品を保存すると、ターゲットルールにその製品のインデックスが付けられ、最終的に次のようになります:( Mage_Rule_Model_Resource_Abstract::bindRuleToEntity()

$adapter->delete($this->getTable($entityInfo['associations_table']), $adapter->quoteInto($entityInfo['rule_id_field'] . ' IN (?) AND ', $ruleIds) . $adapter->quoteInto($entityInfo['entity_id_field'] . ' NOT IN (?)', $entityIds); 

これにより、影響を受ける製品リストから他のすべての製品が削除されます。targetruleインデックスのモードを「手動」に設定すると、問題は再現しません。しかし、これはそれを解決しません。隠すだけです。

私の見解では、これは深刻なMagento EEバグです。


受け入れられた回答で問題は解決しましたか?私はEE 1.11.1.0で同じ問題を抱えています
dchayka

それは私のために..
マリウス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.