Sharing is caring!

logo-elastic

            ณ ปัจจุบันระบบการค้นหาข้อมูลในระบบของฐานข้อมูล 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

rdbms_vs_elasticsearch

การติดตั้ง Elasticsearch (1.7.2)

  1. Download Elasticsearch ก่อนจาก elasticsearch-1.7.2.zip
  2. Unzip elasticsearch-1.7.2.zip แล้วจะได้
  3. directory_unzipเข้า folder elasticsearch-1.7.2 ด้วยคำสั่ง
    $ cd elasticsearch-1.7.2
  4. สั่ง run Elasticsearch ด้วยคำสั่ง
    $ bin\elasticsearch.bat

    run_elasticsearch

  5. เปิด Browser แล้วพิมพ์  http://localhost:9200/

localhost

การติดตั้งตัวช่วย เพิ่มการใช้งานของ Elasticsearch ให้ง่ายขึ้นด้วย Marvel

  1. ให้ไปติดตั้ง plugin marvel เพิ่มกันก่อนโดยให้เข้าไปที่ elasticsearch1.7.2 แล้วพิมพ์
    $ bin\plugin -i elasticsearch\marvel\latest (สำหรับ Windown OS) สำหรับผมเคยติดตั้งไปแล้ว
  2. mavelเมื่อติดตั้ง เรียบร้อยให้ Restart Elasticsearch อีกครั้ง (สำหรับท่านใดที่ยังเปิดมันอยู่)
  3. ให้เปิด Browser แล้วพิมพ์ http://localhost:9200/_plugin/marvel
  4. mavel_1ส่วนเมนูที่เราจะเข้าไปใช้งานกันก็คือ เมนู Sensemavel_2
  5. เปิดมาแล้วก็จะพบ  UI แบบนี้

mavel_3




ตัวอย่างการใช้งาน ทำระบบ ร้านหนังสือ

กำหนดค่า

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"

}

 

create

การแก้ไข (ต้องการแก้ไขข้อมูลหนังสือ ที่ Document ที่ 2)

POST bookstore/book/2

{

    "name"  : "poolsawat.com id 1",

    "price" : 490,

    "pages" : 200,

    "published_date" : "2015/09/23"

}

 

update

การลบ DELETE (ต้องการลบข้อมูลที่มีเลข Document เท่ากับ 2)

DELETE bookstore/book/2

delete

การค้นหา (ต้องการค้นข้อมูล ทุก Field ที่มีคำว่า “poolsawat.com”)

GET bookstore/book/_search?q=poolsawat.com

search

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

                       }

                  }

             }

         }

     }

}

 

dls_search




สำหรับฟังก์ชันสำหรับการ search ของ Elasticsearch นี้มีเยอะมาก จากตัวอย่างการค้นหาเป็นเพียงส่วนหนึ่งของการค้นหาแบบทั่วไป

สำหรับใครที่ต้องการดูข้อมูลเพิ่มเติมหรือกำลังต้องการหา Video เรียนผมแนะนำ coursesquare สอน Elasticsearch

ขอขอบคุณ แหล่งที่มารูปภาพประกอบ :: http://www.sprint3r.com/