ณ ปัจจุบันระบบการค้นหาข้อมูลในระบบของฐานข้อมูล RDBMS (Relational database management system) คงหนีไม่พ้นคำสั่งเหล่านี้ SELECT … FROM [table] WHERE [COLUMN] like ‘%word%’ … ก็ถือว่าเป็นคำสั่งพื้นฐานสำหรับการค้นหาข้อมูลที่ต้องการจาก Database ของเรา ข้อมูลหลักร้อย พัน หรือ แสนแถว ระบบความเร็วในการค้นหาก็ยังถือว่าพอรับได้ แต่เมื่อ Database ของเราเริ่มใหญ่ขึ้นข้อมูลมีจำนวนหลัก สิบล้าน ร้อยล้านแถว ก็เกิดปัญหาเรื่องประสิทธิภาพเรื่องความเร็วในการค้นหาข้อมูล ความเร็วในการค้นหาเริ่มที่จะช้าลงเป็นอย่างมาก … แล้วปัญหานี้จะมีเครื่องมืออะไรมาช่วยได้บ้าง
ปัจจุบัน เครื่องมือที่ช่วยมาตอบโจทย์เรื่องนี้ก็มีมากมายแบบทั้งที่ฟรีและมีค่าใช้จ่าย แต่ในเมื่อมันมีของฟรีให้ใช้ให้ลอง ทำไมเราจะไม่เอามาใช้ละ
Elasticsearch ช่วยแก้ปัญหานี้เลย
ต้นกำเนิด Elasticsearch
- ถูกสร้างเมื่อปี 2010
- โดยเวอร์ชั่น 0.4 เป็นเวอร์ชั่น แรกที่ถูกปล่อยออกมาให้ได้ใช้งานกัน
- พัฒนาโดย Shay Banon
- ถูกพัฒนาต่อยอดมาจาก apache lucene
- พัฒนาด้วยภาษา Java
- เวอร์ชั่น ปัจจุบัน 5.3 (อัพเดทเมื่อวันที่ 25-04-2017)
Elasticsearch คืออะไร
- Open sources (เปิดให้ใช้งานพัฒนาต่อยอด ได้ฟรี)
- Distributed (การกระจายตัว) & Scalable (ปรับขนาดได้)
- Highly Availability การการะจายตัวสำรองข้อมูลอัตโนมัติ
- Document Oriented (พื้นฐานการทำงานทั้งหมดทำในรูปแบบของ Json format) หรือ Haml format ก็สามารถทำได้
- รองรับการทำงานในรูปแบบของ RESTful API (GET,PUT,POST,DELETE)
- Full Text Search Engine
- Real time search and analytics data
การเปรียบเทียบโครงสร้างระหว่าง RDBMS vs Elasticsearch
การติดตั้ง Elasticsearch (1.7.2)
- Download Elasticsearch ก่อนจาก elasticsearch-1.7.2.zip
- Unzip elasticsearch-1.7.2.zip แล้วจะได้
- เข้า folder elasticsearch-1.7.2 ด้วยคำสั่ง
$ cd elasticsearch-1.7.2
- สั่ง run Elasticsearch ด้วยคำสั่ง
$ bin\elasticsearch.bat
- เปิด Browser แล้วพิมพ์ http://localhost:9200/
การติดตั้งตัวช่วย เพิ่มการใช้งานของ Elasticsearch ให้ง่ายขึ้นด้วย Marvel
- ให้ไปติดตั้ง plugin marvel เพิ่มกันก่อนโดยให้เข้าไปที่ elasticsearch1.7.2 แล้วพิมพ์
$ bin\plugin -i elasticsearch\marvel\latest (สำหรับ Windown OS) สำหรับผมเคยติดตั้งไปแล้ว
- เมื่อติดตั้ง เรียบร้อยให้ Restart Elasticsearch อีกครั้ง (สำหรับท่านใดที่ยังเปิดมันอยู่)
- ให้เปิด Browser แล้วพิมพ์ http://localhost:9200/_plugin/marvel
- ส่วนเมนูที่เราจะเข้าไปใช้งานกันก็คือ เมนู Sense
- เปิดมาแล้วก็จะพบ UI แบบนี้
ตัวอย่างการใช้งาน ทำระบบ ร้านหนังสือ
กำหนดค่า
INDEX (DATABASE ใน RDBMS) :: bookstore
TYPE (TABLE ใน RDBMS) :: book
DOCUMENT (ROW ใน RDBMS) :: 1,2,…
FIELD (COLUMN ใน RDBMS) :: {“name”: “value”,”price” : value , “page” : value,”published_date” : value}
ตัวอย่าง
การเพิ่มข้อมูล (ต้องการเพิ่มข้อมูล หนังสือโดยให้มีเลข Document เท่ากับ 1)
PUT bookstore/book/1
{ "name" : "poolsawat.com", "price" : 390, "pages" : 200, "published_date" : "2015/09/23" }
การแก้ไข (ต้องการแก้ไขข้อมูลหนังสือ ที่ Document ที่ 2)
POST bookstore/book/2
{ "name" : "poolsawat.com id 1", "price" : 490, "pages" : 200, "published_date" : "2015/09/23" }
การลบ DELETE (ต้องการลบข้อมูลที่มีเลข Document เท่ากับ 2)
DELETE bookstore/book/2
การค้นหา (ต้องการค้นข้อมูล ทุก Field ที่มีคำว่า “poolsawat.com”)
GET bookstore/book/_search?q=poolsawat.com
DLS (Domain Specific Language) search การค้นหาแบบขั้นสูง (ต้องการค้นหาข้อมูล ที่ Field ชื่อว่า name ที่มีค่า “poolsawat.com” กรองข้อมูลด้วยว่า ราคาหนังสือต้องมากกว่าหรือเท่ากับ 300 บาท)
GET bookstore/book/_search
{ "query": { "filtered": { "query": { "match": { "name": "poolsawat.com" } }, "filter": { "range": { "price": { "gte": 300 } } } } } }
สำหรับฟังก์ชันสำหรับการ search ของ Elasticsearch นี้มีเยอะมาก จากตัวอย่างการค้นหาเป็นเพียงส่วนหนึ่งของการค้นหาแบบทั่วไป
สำหรับใครที่ต้องการดูข้อมูลเพิ่มเติมหรือกำลังต้องการหา Video เรียนผมแนะนำ coursesquare สอน Elasticsearch
ขอขอบคุณ แหล่งที่มารูปภาพประกอบ :: http://www.sprint3r.com/