Image may be NSFW.
Clik here to view.
Clik here to view.

เป้าหมายทำการ import ข้อมูลจากไฟล์ CSV เข้า Elasticsearch
ถ้าจะเขียน code ไปเลยก็เกรงใจ ELK stack ซึ่งเขามี Logstash ให้ใช้งานอยู่แล้ว ดังนั้นการ import ข้อมูลก็จะใช้งาน Logstashการใช้งานก็ไม่ยาก เพียงทำการสร้างไฟล์ configuration ขึ้นมา
เพื่อระบุว่า input มาจากไหน ? filter ขั้นการแปลงข้อมูลเป็นอย่างไร ? output ผลลัพธ์นำไปจัดเก็บที่ไหน ? Image may be NSFW.Clik here to view.

จากข้อมูลสรุปได้ว่า
input อ่านจากไฟล์ CSV filter ใช้ csv filter และทำการรวม field ของ Latitude กับ Longitude เข้าด้วยกัน output จัดเก็บลง Elasticsearch และ แสดงผลออกทาง console เพื่อให้เห็นผลการทำงานนิดหน่อย สามารถเขียนไฟล์ configuration ได้ดังนี้ [gist id="a51b9bcc6cd22f6f9de67b57fe39b3da" file="thai.conf"] คำอธิบายเพิ่มเติม เหตุผลที่ต้องรวม field ของ Latitude กับ Longitude เข้าด้วยกัน เนื่องจากรูปแบบข้อมูลที่นำเข้า field ชนิด geo_point ใน Elasticsearch นั้น ต้องการเป็น Latitude, Longitude (ผมเลือกใช้รูปแบบ Geo point as String เพราะว่าง่ายดี) ซึ่ง field ใหม่จะชื่อว่า localtion จากนั้นก็ลบ field ทั้งสองทิ้งไปสิ่งที่ต้องทำก่อนการ import ข้อมูลจาก CSV ด้วย Logstash คือ
กำหนด mapping ของ field location ก่อน เนื่องจาก Elasticsearch มันไม่สามารถแปลงให้แบบอัตโนมัติ [gist id="a51b9bcc6cd22f6f9de67b57fe39b3da" file="1.txt"] เมื่อทุกอย่างพร้อมก็ run Logstash เลย [code] $logstash -f thai.conf [/code] ได้ข้อมูลจำนวน 7,767 documents มันถูกไหมนะ ?สุดท้ายส่ง Pull Request ไปแล้ว หวังว่าจะมีประโยชน์ต่อคนใช้งาน Elasticsearch บ้างนะครับ