コマンドラインを使用してAkeneoの画像列にSKUのみを含むフィードをインポートすると、次のコマンドでインポートが失敗します。
[2018-04-06 15:35:24] batch.ERROR: Encountered an error executing the step:
An exception occurred while executing 'INSERT INTO pim_catalog_completeness
(ratio, missing_count, required_count, locale_id, channel_id, product_id) VALUES (?, ?, ?, ?, ?, ?)'
with params [100, 0, 1, 39, 1, 4404]:
SQLSTATE[23000]: Integrity constraint violation:
1062 Duplicate entry '1-39-4404' for key 'searchunique_idx' [] []
誰かがこの問題を引き起こしている可能性があることを知っていますか? または、どうすれば修正できますか? 奇妙な部分は、そのテーブルのデータベースにID 4404の製品もあることをキーが示唆していることですが、そうではありません。
更新:さらに調べてみると、クライアントによってアップロードされたファイルに同じSKUが複数回出現していることがわかりました。 これがこの問題の原因でしょうか? これらのことは単一のトランザクションで行われますか? (これにより、データベースで衝突するIDが見つからなかった理由を説明できます)。
私は2つのシナリオでこの問題を経験しました。
インポートデータが重複しています
提案は正しいです。インポートファイルに同じSKUのインスタンスが複数ある場合、このエラーが発生します。
Elastic Searchインデックスは、削除された製品データを保持します
この問題が発生したもう1つのケースは、elasticsearchが削除された商品のレコードをインデックスに保持し、商品モデルのインポート後に実行される完全性スクリプトを何らかの形で「フィード」している場合です。
これは、製品モデルを削除した後、Akeneoが下にある製品バリアントのすべてのESデータを削除しなかったか、データベースからレコードを手動で削除したことが原因でした。
2つのうちどちらが原因かは完全にはわかりませんが、2番目のケースである可能性があり、それは私自身のせいです。
ただし、データベースのどこにもこれらの製品の重複レコードが見つからず、ファイルをインポートできなかったため、デバッグは非常に困難でした。
ソリューション:
コマンドラインから、すべてのESインデックスを破棄します。
bin/console akeneo:elasticsearch:reset-indexes
次に、再構築します。
bin/console pim:product:index --all
bin/console pim:product-model:index --all
同じ問題が発生しました。 @wigmanから提供された解決策は私を助けました。 ありがとう
この問題は、DBをある環境から別の環境にコピーすることで発生しました。インデックスは、確かに同じではありませんでした。
@wigmanによって提案された解決策は、数千の製品がある小さな店でのみ機能します。
コマンドbin/console akeneo:elasticsearch:reset-indexes
はインデックスからすべてを削除し、データが返されるまでしばらく待つ必要があります。 150k以上の製品モデルと1kk以上の製品がある場合、インデックスの再作成には最大4時間かかることがあるため、これはオプションではありません。
最も参考になるコメント
私は2つのシナリオでこの問題を経験しました。
インポートデータが重複しています
提案は正しいです。インポートファイルに同じSKUのインスタンスが複数ある場合、このエラーが発生します。
Elastic Searchインデックスは、削除された製品データを保持します
この問題が発生したもう1つのケースは、elasticsearchが削除された商品のレコードをインデックスに保持し、商品モデルのインポート後に実行される完全性スクリプトを何らかの形で「フィード」している場合です。
これは、製品モデルを削除した後、Akeneoが下にある製品バリアントのすべてのESデータを削除しなかったか、データベースからレコードを手動で削除したことが原因でした。
2つのうちどちらが原因かは完全にはわかりませんが、2番目のケースである可能性があり、それは私自身のせいです。
ただし、データベースのどこにもこれらの製品の重複レコードが見つからず、ファイルをインポートできなかったため、デバッグは非常に困難でした。
ソリューション:
コマンドラインから、すべてのESインデックスを破棄します。
bin/console akeneo:elasticsearch:reset-indexes
次に、再構築します。
bin/console pim:product:index --all
bin/console pim:product-model:index --all