เพิ่มข้อมูลใน Magento Catalog โดยไม่ทำให้ Indexer พัง
ผู้ใช้งาน Magento หลายคนประสบปัญหาเดียวกัน คุณมีสินค้าหลายพันรายการที่มีข้อมูลคุณลักษณะ (attributes) ไม่ครบถ้วน คำอธิบายสินค้าสั้นเกินไป หรือไม่มีการแปลภาษา
การหาแหล่งข้อมูลนั้นเป็นเรื่องง่าย แต่ส่วนที่ยากคือการนำข้อมูลเหล่านั้นเข้าสู่ Catalog ของคุณโดยไม่ทำให้ร้านค้าของคุณล่ม
ข้อผิดพลาดที่พบบ่อยคือการใช้ loop แบบธรรมดาเพื่อบันทึกสินค้าทีละรายการ
หากคุณใช้ method save ของ product repository ใน loop คุณจะไปกระตุ้น full lifecycle สำหรับสินค้าทุกชิ้น ซึ่งจะทำให้เกิดการรัน validation, observers และตัวกระตุ้นการ reindex ซ้ำแล้วซ้ำเล่านับพันครั้ง สิ่งนี้ทำให้สคริปต์ต้องทำงานนานหลายชั่วโมง และทำให้หน้า admin panel ของคุณทำงานช้าลงอย่างมาก
เส้นทางการบันทึกข้อมูล (save path) ถูกออกแบบมาเพื่อให้มนุษย์แก้ไขสินค้าทีละชิ้น แต่มันไม่ใช่เครื่องมือที่ถูกต้องสำหรับการอัปเดตข้อมูลจำนวนมาก (bulk updates)
ทำตามขั้นตอนเหล่านี้เพื่ออัปเดต Catalog ของคุณอย่างปลอดภัย:
ใช้การอัปเดต attribute แบบกลุ่ม (mass attribute updates) แทนที่จะบันทึก product model ทั้งหมด ให้ใช้
Magento\Catalog\Model\Product\Actionและใช้ methodupdateAttributesเพื่อเขียนข้อมูลลงใน database tables โดยตรง โดยทำเป็นชุด (batches) ครั้งละ 1,000 ถึง 2,000 IDsเปลี่ยนการตั้งค่า indexer ของคุณ ตั้งค่า indexers เป็น "Update by Schedule" ก่อนเริ่มทำงาน หากคุณใช้ "Update on Save" ทุกการเขียนข้อมูลจะไปกระตุ้นการ reindex แบบ synchronous แต่หากใช้แบบ schedule ข้อมูลที่เขียนจะถูกส่งไปยัง changelog และให้ cron job เป็นตัวจัดการงานแทน
จัดการการแปลภาษาอย่างถูกต้อง การแปลภาษาคือค่า attribute สำหรับ store view ที่เฉพาะเจาะจง ให้ส่ง store ID ที่ถูกต้องไปยัง method
updateAttributesและอย่าเขียนทับค่า default ส่วนกลาง (global default values) เมื่อคุณกำลังเพิ่มภาษาท้องถิ่นจัดการเนื้อหาจาก AI ด้วยความระมัดระวัง LLM เขียนคำโฆษณาได้ดีเยี่ยม แต่บ่อยครั้งก็มักจะ "หลอน" (hallucinate) ข้อมูลขึ้นมาเอง เช่น อาจบอกว่าเสื้อเชิ้ตทำจากผ้าฝ้าย ทั้งที่จริงๆ แล้วเป็นผ้าโพลีเอสเตอร์ • เขียนเนื้อหาจาก AI ลงใน staging field หรือ scope ที่ปิดใช้งานไว้ก่อน • ตรวจสอบตัวอย่างจำนวนเล็กน้อยก่อนใช้งานจริง • รักษาข้อมูลทางเทคนิค เช่น ขนาดและวัสดุ ให้มาจากแหล่งข้อมูลที่ผ่านการตรวจสอบแล้วเท่านั้น
สรุปสำหรับการเพิ่มข้อมูลจำนวนมาก:
- ตั้งค่า indexers เป็นโหมด scheduled
- ใช้ staging field สำหรับข้อมูลใหม่
- อัปเดตข้อมูลเป็นชุด ชุดละ 1,000 ถึง 2,000 IDs
- หลีกเลี่ยงการใช้ full product save path
- ทำการ reindex การเปลี่ยนแปลง
- ทดสอบหน้าสินค้าที่เป็นตัวอย่าง
แหล่งข้อมูลนั้นเป็นเรื่องง่าย แต่การจัดการ Catalog ที่ใช้งานจริง (live catalog) นั้นต้องใช้วิธีการที่แตกต่างออกไป
Source: https://dev.to/iamrobindhiman/enriching-a-large-magento-catalog-without-melting-the-indexer-3mk9
