หลังจากที่รู้จักกับ Elasticsearch ตั้งแต่ verison 0.9 มาจนถึง 2.0 นั้น
มีความสามารถต่าง ๆ เปลี่ยนแปลงไปมากมาย
หนึ่งในนั้นคือ Mapping หรือ การกำหนดโครงสร้างของข้อมูล
มาดูว่าควรทำการกำหนด mapping อย่างไร
เพื่อให้ทำงานได้ดียิ่งขึ้น
สามารถใช้ได้ทั้ง version 1.7 และ 2.0
1. กำหนดชนิดของข้อมูลในแต่ละ field ให้ถูกต้อง และ เหมาะสม
โดยปกติ Elasticsearch นั้น เราไม่จำเป็นต้องกำหนด mapping ของข้อมูล เนื่องจากจะสร้าง mapping ให้อัตโนมัติจากข้อมูลนั่นเอง (Dynamic mapping) แต่ถ้าผลการทำงานอาจจะไม่ถูกต้อง และ เหมาะสมกับความต้องการ ดังนั้นแนะนำให้ทำการสร้าง mapping ขึ้นมาก่อน หรืออาจจะใช้ index template ก็ได้ ตัวอย่างเช่น- ข้อมูลชนิด geo_point สำหรับเก็บข้อมูลตำแหน่ง latitude และ longitude
- ข้อมูลชนิด date สำหรับข้อมูล timestame
2. ในแต่ละ field ควรกำหนดให้ Elasticsearch ทำการ analyse และ จัดเก็บเท่าที่จำเป็น
โดยปกติ Elasticsearch นั้น จะทำการ analyse และ จัดเก็บข้อมูลของทุก ๆ field ซึ่งไม่ค่อยมีผลมากนักสำหรับตอนเริ่มต้นของระบบแต่เมื่อข้อมูลเยอะขึ้นเรื่อย ๆ ปัญหาจะตามมาอย่างมาก ทั้งพื้นที่การจัดเก็บ และ ขนาดของ memory ที่ต้องใช้งาน ส่งผลต่อเวลาในการประมวลผลดังนั้น เพื่อลดการใช้ resource ต่าง ๆ โดยไม่จำเป็น ต้องทำการพิจารณาว่า field ใดควร analyse และ จัดเก็บบ้าง ? หรือ field ไหนไม่ถูกใช้งานเลย ? ซึ่งสามารถกำหนดได้ใน mapping นั่นเอง ตัวอย่างเช่น ข้อมูลของหน้า web page ซึ่งเป็น HTML ซึ่งใช้งานเพียงแสดงผลอย่างเดียว ไม่เคยทำการค้นหาเลย ดังนั้น ควรกำหนดให้จัดเก็บอย่างเดียว แต่ไม่ทำการ analyze
3. ใช้งาน Multi-fields หรือ Raw field เมื่อต้องการทั้ง Analyse และ Aggregation
ตัวอย่างเช่น ข้อมูลของ Tag ซึ่งสามารถจัดเก็บข้อมูลที่มีพวก white space ได้ เช่น ช่องว่าง และ - เป็นต้น และข้อมูล Tag ต้องนำมาใช้งาน เพื่อนับว่าแต่ละ Tag มีข้อมูลที่เกี่ยวข้องจำนวนเท่าไร ? แน่นอนว่า ต้องทำการนับผ่าน Aggregation นั่นเอง ซึ่งเป็นปัญหา classic ที่ทุก ๆ คนจะต้องเจอ การแก้ไขที่เหมาะสมที่สุด คือ การใช้ multi-field โดย field หลัก กำหนดให้ทำการ analyze และ จัดเก็บ ส่วน raw field จะกำหนดไม่ให้ analyze เพื่อนำมานับจำนวนข้อมูลที่เกี่ยวข้องได้อย่างถูกต้อง4. ให้ระวังการกำหนดจำนวน Replica และ Shard ของแต่ละ index
เนื่องจากเราไม่สามารถแก้ไขค่าเหล่านี้ได้ หลังจากการ indexed ข้อมูลไปแล้วนะ ดังนั้น ควรทำการประมาณการว่า ข้อมูลมีอัตราการเติบโตเท่าไร เพื่อจะได้เตรียมแผนการรับมือไว้ได้ โดยค่าของ Replica นั้น เราจะเพิ่มก็ต่อเมื่อ- ต้องการเครื่องมาช่วยรองรับผู้ใช้งานที่มากขึ้น
- ต้องการเพิ่มเรื่องของ Availability
- ต้องการ scale up