Pim-community-dev: 2.1.8 : Entrée en double pour la clé 'searchunique_idx' lors de l'importation de produits à l'aide de la CLI

Créé le 6 avr. 2018  ·  3Commentaires  ·  Source: akeneo/pim-community-dev

Lorsque j'importe un flux avec uniquement un SKU et des colonnes d'images dans Akeneo à l'aide de la ligne de commande, l'importation échoue avec la commande suivante :

[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' [] []

Est-ce que quelqu'un sait ce qui pourrait causer ce problème? Ou comment puis-je le réparer? La partie étrange est que la clé suggère qu'il y aurait également un produit avec l'ID 4404 dans ma base de données dans cette table, mais il n'y en a pas.

mise à jour : lors d'une inspection plus approfondie, j'ai remarqué que le fichier téléchargé par le client comportait plusieurs occurrences du même SKU. Cela pourrait-il être la cause de ce problème ? Est-ce que ces choses sont faites en une seule transaction? (ce qui pourrait expliquer pourquoi je n'ai pas pu trouver l'ID de collision dans la base de données).

Commentaire le plus utile

J'ai rencontré ce problème dans 2 scénarios.

Données d'importation en double
Votre suggestion est juste : lorsque vous avez plusieurs instances du même sku dans votre fichier d'importation, vous obtenez cette erreur.

Les index Elastic Search contiennent les données produit supprimées
L'autre cas où j'ai eu ce problème était lorsque elasticsearch a conservé un enregistrement d'un produit supprimé dans ses index et "alimente" en quelque sorte le script d'exhaustivité qui s'exécute après l'importation de modèles de produits.
Cela a été causé soit par la suppression du modèle de produit après quoi Akeneo n'a pas supprimé toutes les données ES des variantes de produit sous-jacentes, soit parce que j'avais supprimé manuellement un enregistrement de la base de données.
Je ne sais pas exactement lequel des deux l'a causé, mais c'est peut-être le deuxième cas et c'est un peu de ma faute.

cependant, il était très difficile de déboguer, car je ne pouvais trouver aucun enregistrement en double de ces produits dans ma base de données, ni importer de fichiers.

La solution:
à partir de la ligne de commande, supprimez tous les index ES :
bin/console akeneo:elasticsearch:reset-indexes
Puis reconstruisez :
bin/console pim:product:index --all
bin/console pim:product-model:index --all

Tous les 3 commentaires

J'ai rencontré ce problème dans 2 scénarios.

Données d'importation en double
Votre suggestion est juste : lorsque vous avez plusieurs instances du même sku dans votre fichier d'importation, vous obtenez cette erreur.

Les index Elastic Search contiennent les données produit supprimées
L'autre cas où j'ai eu ce problème était lorsque elasticsearch a conservé un enregistrement d'un produit supprimé dans ses index et "alimente" en quelque sorte le script d'exhaustivité qui s'exécute après l'importation de modèles de produits.
Cela a été causé soit par la suppression du modèle de produit après quoi Akeneo n'a pas supprimé toutes les données ES des variantes de produit sous-jacentes, soit parce que j'avais supprimé manuellement un enregistrement de la base de données.
Je ne sais pas exactement lequel des deux l'a causé, mais c'est peut-être le deuxième cas et c'est un peu de ma faute.

cependant, il était très difficile de déboguer, car je ne pouvais trouver aucun enregistrement en double de ces produits dans ma base de données, ni importer de fichiers.

La solution:
à partir de la ligne de commande, supprimez tous les index ES :
bin/console akeneo:elasticsearch:reset-indexes
Puis reconstruisez :
bin/console pim:product:index --all
bin/console pim:product-model:index --all

Vous avez le même problème. La solution fournie par @wigman m'a aidé. Merci
Le problème est survenu à cause de moi en copiant la base de données d'un environnement à un autre, l'index n'était certainement pas le même.

La solution proposée par @wigman ne fonctionne que pour les petites boutiques avec quelques milliers de produits.
La commande bin/console akeneo:elasticsearch:reset-indexes supprime tout de l'index, puis vous devez attendre un certain temps jusqu'à ce que les données reviennent. Si vous avez plus de 150 000 modèles de produits et 1 000 produits et plus, ce n'est pas une option, car la réindexation peut prendre jusqu'à 4 heures.

Cette page vous a été utile?
0 / 5 - 0 notes