インデクサーを壊さずに Magento カタログを拡充する
多くの Magento ユーザーが同じ問題に直面しています。属性が不足していたり、説明文が不十分だったり、翻訳がなかったりする商品が数千件もあるという問題です。
データソースを見つけるのは簡単です。難しいのは、ストアをダウンさせることなく、そのデータをカタログに反映させることです。
よくある間違いは、単純なループを使用して商品を一つずつ保存することです。
ループ内で product repository の save メソッドを使用すると、各アイテムに対してフルライフサイクルがトリガーされます。バリデーション、オブザーバー、そして再インデックスのトリガーが数千回も実行されます。これにより、スクリプトの実行に数時間かかったり、管理パネルの動作が極端に遅くなったりします。
この save パスは、人間が商品を一つずつ編集することを想定して構築されています。一括更新には不適切なツールです。
カタログを安全に更新するには、以下の手順に従ってください。
一括属性更新を使用する 商品モデル全体を保存する代わりに、
Magento\Catalog\Model\Product\Actionを使用します。updateAttributesメソッドを使用して、データベーステーブルに直接書き込みます。この際、一度に 1,000 〜 2,000 の ID 単位でバッチ処理を行ってください。インデクサーの設定を変更する 開始前に、インデクサーを
Update by Scheduleに設定します。Update on Saveを使用していると、書き込みのたびに同期的な再インデックスがトリガーされます。Update by Scheduleであれば、書き込み内容は変更ログ(changelog)に送られ、cron ジョブがその処理を担います。翻訳を正しく管理する 翻訳とは、特定のストアビューに対する属性値のことです。
updateAttributesメソッドには正しい store ID を渡してください。ローカル言語を追加する際に、グローバルなデフォルト値を上書きしないように注意してください。AI コンテンツは慎重に扱う LLM は優れたコピーを作成しますが、事実を捏造(ハルシネーション)することがよくあります。例えば、ポリエステル製のシャツをコットン製だと言ってしまうことがあります。 • まず、AI コンテンツはステージング用のフィールドや無効化されたスコープに書き込みます。 • 本番環境に反映する前に、少量のサンプルをレビューします。 • 寸法や素材などの技術仕様は、検証済みのデータから取得し続けてください。
一括拡充のまとめ:
- インデクサーをスケジュールモードに設定する。
- 新しいデータにはステージングフィールドを使用する。
- 1,000 〜 2,000 の ID 単位で更新を適用する。
- フル製品保存パス(full product save path)を避ける。
- 変更を再インデックスする。
- 商品ページのサンプルをテストする。
データソースを見つけるのは簡単なことです。稼働中のカタログを管理するには、異なるアプローチが必要です。
出典: https://dev.to/iamrobindhiman/enriching-a-large-magento-catalog-without-melting-the-indexer-3mk9
