ทำการบันทึกการ migrate ข้อมูลในระบบงานจาก Elasticsearch 1.7 ไปยัง 5.x
ซึ่งพบว่ามีสิ่งต่าง ๆ ที่เปลี่ยนไปเยอะพอสมควรประกอบไปด้วย

  • เรื่องการ mapping ของ index ที่เปลี่ยนไปเยอะพอสมควร
  • ใน Elasticsearch 5.x ไม่มีชนิดข้อมูลที่เป็น string แล้วนะ
  • Query DSL หลาย ๆ ตัวถูกตัดทิ้งไปแล้วเช่น filterred เป็นต้น
  • Aggregate API ที่เปลี่ยนไปเช่น size=0 ในการดึงข้อมูลถูกเอาออกไป เนื่องจากมีปัญหาเรื่อง performance
  • การ configuration Elasticsearch ก่อนที่จะ deploy

มีรายละเอียดดังนี้

1. ชนิดข้อมูล String ไม่มีแล้วนะ

จะมีชนิดข้อมูล text เข้ามาแทน ซึ่งเป็น full-text search
รวมทั้งจะทำสร้าง multi-field ชื่อว่า keyword มีชนิด keyword ให้แบบอัตโนมัติ
มีหน้าที่แทนการกำหนด index=not_analyze
สามารถเรียกใช้งาน keyword ได้ด้วย field_name.keyword
โดยเราสามารถแก้ไขชื่อของ keyword ได้

2. เปลี่ยน Query DSL จาก filtered query มาเป็น boolean query

เนื่องจาก filtered query ถูกเอาออกไปแล้ว

สามารถแก้ไขได้ดังตัวอย่าง

3. ใน Aggregate API นั้นพบว่า size=0 นั้นถูกลบออกไป

เนื่องจากมีปัญหา Issue 18838 คือเรื่อง performance การทำงานนั่นเอง
ใช้สำหรับกำหนดจำนวนข้อมูลในแต่ละ bucket
ดังนั้นสิ่งที่ต้องทำก็คือ กำหนด size ไปเองที่มากกว่า 0 เท่านั้นเอง
รวมทั้ง field ที่จะ aggregate ต้องกำหนดเป็น fielddata ด้วยนะ
หรือเป็น field ที่เป็นตัวเลข หรือ keyword นั่นเอง

ตัวอย่างเช่น

4. ในการ configuration ของ Elasticsearch server ก็เปลี่ยนเยอะพอสมควร

ใน Elasticsearch 5.2.2 นั้น
จะแยกออกเป็นสอง mode คือ development และ production
โดยค่า default จะเป็น development mode คือทำงานได้เฉพาะเครื่องหรือ localhost เท่านั้น
ดังนั้นถ้าจะทำการ deploy ไปยัง production
ตัวอย่างเช่น

network.host: ip
discovery.zen.ping.unicast.hosts: ["host1", "host2"]

ส่วนค่า default ของ ES HEAP คือ 2 GB นะครับ
ซึ่งแนะนำให้เปลี่ยนนะครับสัก 4-8 GB เป็นค่าเริ่มต้น

ที่สำคัญใน Elasticsearch ยังแนะนำ checklist ต่าง ๆ ในการ configuration

สุดท้ายอย่าลืมทดสอบให้มากนะครับ