Pim-community-dev: 2.1.8: Entrada duplicada para la clave 'searchunique_idx' al importar productos usando la CLI

Creado en 6 abr. 2018  ·  3Comentarios  ·  Fuente: akeneo/pim-community-dev

Cuando estoy importando un feed con solo un SKU y columnas de imágenes en Akeneo usando la línea de comando, la importación falla con el siguiente comando:

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

¿Alguien sabe qué podría estar causando este problema? O como puedo solucionarlo? Lo extraño es que la clave sugiere que también habría un producto con ID 4404 en mi base de datos en esa tabla, pero no lo hay.

actualización: al inspeccionar más, noté que el archivo que carga el cliente tenía varias apariciones del mismo SKU. ¿Podría ser esta la causa de este problema? ¿Se hacen estas cosas en una sola transacción? (lo que podría explicar por qué no pude encontrar la identificación en colisión en la base de datos).

Comentario más útil

He experimentado este problema en 2 escenarios.

Datos de importación duplicados
Su sugerencia es correcta: cuando tiene varias instancias del mismo sku en su archivo de importación, obtiene este error.

Los índices de Elastic Search retienen los datos de productos eliminados
El otro caso en el que tuve este problema fue cuando elasticsearch mantuvo un registro de un producto eliminado en sus índices y de alguna manera está 'alimentando' el script de integridad que se ejecuta después de importar modelos de productos.
Esto se debió a que eliminé el modelo del producto, después de lo cual Akeneo no eliminó todos los datos de ES de las variantes del producto subyacente, o porque eliminé un registro manualmente de la base de datos.
No estoy completamente seguro de cuál de los dos lo causó, pero podría ser el segundo caso y luego es culpa mía.

sin embargo, fue muy difícil de depurar, porque no pude encontrar ningún registro duplicado de estos productos en ninguna parte de mi base de datos, ni importar archivos.

La solución:
desde la línea de comandos, deseche todos los índices ES:
bin/console akeneo:elasticsearch:reset-indexes
Luego reconstruir:
bin/console pim:product:index --all
bin/console pim:product-model:index --all

Todos 3 comentarios

He experimentado este problema en 2 escenarios.

Datos de importación duplicados
Su sugerencia es correcta: cuando tiene varias instancias del mismo sku en su archivo de importación, obtiene este error.

Los índices de Elastic Search retienen los datos de productos eliminados
El otro caso en el que tuve este problema fue cuando elasticsearch mantuvo un registro de un producto eliminado en sus índices y de alguna manera está 'alimentando' el script de integridad que se ejecuta después de importar modelos de productos.
Esto se debió a que eliminé el modelo del producto, después de lo cual Akeneo no eliminó todos los datos de ES de las variantes del producto subyacente, o porque eliminé un registro manualmente de la base de datos.
No estoy completamente seguro de cuál de los dos lo causó, pero podría ser el segundo caso y luego es culpa mía.

sin embargo, fue muy difícil de depurar, porque no pude encontrar ningún registro duplicado de estos productos en ninguna parte de mi base de datos, ni importar archivos.

La solución:
desde la línea de comandos, deseche todos los índices ES:
bin/console akeneo:elasticsearch:reset-indexes
Luego reconstruir:
bin/console pim:product:index --all
bin/console pim:product-model:index --all

Tengo el mismo problema. La solución provista por @wigman me ayudó. Gracias
El problema ocurrió porque yo copié la base de datos de un entorno a otro, el índice seguramente no era el mismo.

La solución sugerida por @wigman funciona solo para pequeñas tiendas con unos pocos miles de productos.
El comando bin/console akeneo:elasticsearch:reset-indexes elimina todo del índice y luego debe esperar un tiempo hasta que se recuperen los datos. Si tiene más de 150 000 modelos de productos y más de 1 kk de productos, no es una opción, ya que volver a indexar puede tardar hasta 4 horas.

¿Fue útil esta página
0 / 5 - 0 calificaciones