ทำการบันทึกการ 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 ได้
[gist id="f5beb6a2700658f868beed6722d9fc02" file="mapping.txt"]
2. เปลี่ยน Query DSL จาก filtered query มาเป็น boolean query
เนื่องจาก filtered query ถูกเอาออกไปแล้ว
[gist id="f5beb6a2700658f868beed6722d9fc02" file="filtered.txt"]
สามารถแก้ไขได้ดังตัวอย่าง
[gist id="f5beb6a2700658f868beed6722d9fc02" file="boolean.txt"]
3. ใน Aggregate API นั้นพบว่า size=0 นั้นถูกลบออกไป
เนื่องจากมีปัญหา
Issue 18838 คือเรื่อง performance การทำงานนั่นเอง
ใช้สำหรับกำหนดจำนวนข้อมูลในแต่ละ bucket
ดังนั้นสิ่งที่ต้องทำก็คือ กำหนด size ไปเองที่มากกว่า 0 เท่านั้นเอง
รวมทั้ง field ที่จะ aggregate ต้องกำหนดเป็น fielddata ด้วยนะ
หรือเป็น field ที่เป็นตัวเลข หรือ keyword นั่นเอง
ตัวอย่างเช่น
[gist id="f5beb6a2700658f868beed6722d9fc02" file="aggs.txt"]
4. ในการ configuration ของ Elasticsearch server ก็เปลี่ยนเยอะพอสมควร
ใน Elasticsearch 5.2.2 นั้น
จะแยกออกเป็นสอง mode คือ development และ production
โดยค่า default จะเป็น development mode คือทำงานได้เฉพาะเครื่องหรือ localhost เท่านั้น
ดังนั้นถ้าจะทำการ deploy ไปยัง production
ตัวอย่างเช่น
[code]
network.host: ip
discovery.zen.ping.unicast.hosts: ["host1", "host2"]
[/code]
ส่วนค่า default ของ ES HEAP คือ 2 GB นะครับ
ซึ่งแนะนำให้เปลี่ยนนะครับสัก 4-8 GB เป็นค่าเริ่มต้น
ที่สำคัญใน Elasticsearch ยังแนะนำ checklist ต่าง ๆ ในการ configuration
สุดท้ายอย่าลืมทดสอบให้มากนะครับ