จาก Repository ใน Github ที่สรุปข้อมูลจังหวัด อำเภอ และ ตำบลต่าง ๆ ในประเทศไทย
ที่สำคัญมี location ของแต่ละตำบลอีกด้วย
สามารถนำไปใช้ได้เลย แจ่มมาก ๆ

แต่เห็นว่ายังไม่มีการนำเข้า Elasticsearch
เพื่อให้ง่ายต่อการใช้งาน เช่นการค้นหาและหาระยะทางต่าง ๆ เป็นต้น
จึงทำการสรุปขั้นตอนไว้นิดหน่อย

เป้าหมายทำการ import ข้อมูลจากไฟล์ CSV เข้า Elasticsearch

ถ้าจะเขียน code ไปเลยก็เกรงใจ ELK stack
ซึ่งเขามี Logstash ให้ใช้งานอยู่แล้ว
ดังนั้นการ import ข้อมูลก็จะใช้งาน Logstash

การใช้งานก็ไม่ยาก เพียงทำการสร้างไฟล์ configuration ขึ้นมา

เพื่อระบุว่า
input มาจากไหน ?
filter ขั้นการแปลงข้อมูลเป็นอย่างไร ?
output ผลลัพธ์นำไปจัดเก็บที่ไหน ?

จากข้อมูลสรุปได้ว่า

input อ่านจากไฟล์ CSV
filter ใช้ csv filter และทำการรวม field ของ Latitude กับ Longitude เข้าด้วยกัน
output จัดเก็บลง Elasticsearch และ แสดงผลออกทาง console เพื่อให้เห็นผลการทำงานนิดหน่อย
สามารถเขียนไฟล์ configuration ได้ดังนี้

คำอธิบายเพิ่มเติม
เหตุผลที่ต้องรวม field ของ Latitude กับ Longitude เข้าด้วยกัน
เนื่องจากรูปแบบข้อมูลที่นำเข้า field ชนิด geo_point ใน Elasticsearch นั้น
ต้องการเป็น Latitude, Longitude (ผมเลือกใช้รูปแบบ Geo point as String เพราะว่าง่ายดี)
ซึ่ง field ใหม่จะชื่อว่า localtion
จากนั้นก็ลบ field ทั้งสองทิ้งไป

สิ่งที่ต้องทำก่อนการ import ข้อมูลจาก CSV ด้วย Logstash คือ

กำหนด mapping ของ field location ก่อน
เนื่องจาก Elasticsearch มันไม่สามารถแปลงให้แบบอัตโนมัติ

เมื่อทุกอย่างพร้อมก็ run Logstash เลย

$logstash -f thai.conf

ได้ข้อมูลจำนวน 7,767 documents
มันถูกไหมนะ ?

สุดท้ายส่ง Pull Request ไปแล้ว
หวังว่าจะมีประโยชน์ต่อคนใช้งาน Elasticsearch บ้างนะครับ