Elasticsearch Search Engine IT General

Elasticsearch Search Engine

📅 2026-02-09 | โดย อ.บอม กิตติทัศน์ เจริญพนาสิทธิ์ — SiamCafe.net Since 1997

Elasticsearch Search Engine คืออะไร / ทำไมถึงสำคัญ

น้องๆ เคยเจอปัญหาหาข้อมูลในเว็บยากไหม? สมัยผมทำร้านเน็ต SiamCafe เนี่ย ลูกค้าชอบบ่นว่าหาเกมส์ที่ต้องการไม่เจอ ทั้งๆ ที่มีอยู่ในเครื่อง นั่นแหละครับคือปัญหาที่ Elasticsearch เข้ามาช่วยแก้

Elasticsearch มันคือ Search Engine ที่ฉลาดมากๆ ไม่ใช่แค่หาคำตรงๆ แต่มันเข้าใจความหมายของคำด้วย ทำให้ผลลัพธ์ที่ได้แม่นยำกว่าเดิมเยอะ แถมยัง Scale ได้สบายๆ ไม่ว่าข้อมูลจะเยอะแค่ไหนก็เอาอยู่ บริษัทใหญ่ๆ เลยชอบใช้กัน อย่างเช่น Netflix, Uber หรือแม้แต่ Wikipedia เองก็ใช้ Elasticsearch ในการค้นหาข้อมูล

พื้นฐานที่ต้องรู้

Index คืออะไร?

Index ใน Elasticsearch เหมือนกับตารางใน Database นั่นแหละครับ เอาไว้เก็บข้อมูล แต่ Index ใน Elasticsearch มันพิเศษตรงที่ออกแบบมาเพื่อการค้นหาโดยเฉพาะ สมัยก่อนถ้าจะทำระบบค้นหาข้อมูลในเว็บ ต้องเขียน query SQL เองให้วุ่นวาย แต่ Elasticsearch ทำให้ชีวิตง่ายขึ้นเยอะ

Document คืออะไร?

Document ก็คือข้อมูลแต่ละแถวใน Index ครับ เหมือนกับ Record ใน Database นั่นแหละ Document จะอยู่ในรูปแบบ JSON (JavaScript Object Notation) ซึ่งเป็นรูปแบบที่อ่านง่าย เข้าใจง่าย


{
  "title": "The Lord of the Rings",
  "author": "J.R.R. Tolkien",
  "publication_year": 1954
}

Query DSL (Domain Specific Language) คืออะไร?

Query DSL คือภาษาที่เราใช้ในการสั่งให้ Elasticsearch ค้นหาข้อมูล มันเป็น JSON เหมือนกัน แต่มีรูปแบบที่ซับซ้อนกว่าหน่อย แต่ไม่ต้องกลัวครับ มีเครื่องมือช่วยให้เราเขียน Query ได้ง่ายขึ้นเยอะ

วิธีใช้งาน / เริ่มต้นยังไง

เริ่มต้นใช้งาน Elasticsearch ไม่ยากอย่างที่คิด สมัยนี้มี Docker ช่วยทำให้การติดตั้งง่ายขึ้นเยอะ ลองทำตามขั้นตอนด้านล่างนี้ดูครับ

ขั้นตอนปฏิบัติจริง

ติดตั้ง Elasticsearch ด้วย Docker

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


docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.0
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.17.0

คำสั่งแรกคือ Pull image Elasticsearch จาก Docker Hub ส่วนคำสั่งที่สองคือรัน Elasticsearch บน Docker container โดย map port 9200 และ 9300 ไปยัง host machine

สร้าง Index และ Insert Document

หลังจากติดตั้ง Elasticsearch แล้ว เราก็มาสร้าง Index และ Insert Document กันเลย โดยใช้ REST API


# สร้าง Index
PUT /movies
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "author": { "type": "text" },
      "publication_year": { "type": "integer" }
    }
  }
}

# Insert Document
POST /movies/_doc
{
  "title": "The Hobbit",
  "author": "J.R.R. Tolkien",
  "publication_year": 1937
}

คำสั่งแรกคือสร้าง Index ชื่อว่า "movies" โดยกำหนดจำนวน Shards และ Replicas ส่วนคำสั่งที่สองคือ Insert Document เข้าไปใน Index โดยมีข้อมูลของหนังสือ "The Hobbit"

ค้นหาข้อมูล

ทีนี้เรามาลองค้นหาข้อมูลกันดู สมมติว่าเราต้องการหาหนังสือที่เขียนโดย J.R.R. Tolkien


GET /movies/_search
{
  "query": {
    "match": {
      "author": "J.R.R. Tolkien"
    }
  }
}

คำสั่งนี้จะค้นหา Document ที่ field "author" มีคำว่า "J.R.R. Tolkien" อยู่ ผลลัพธ์ที่ได้ก็จะแสดงข้อมูลของหนังสือที่เขียนโดย J.R.R. Tolkien ทั้งหมด

ลองเข้าไปดูบทความอื่นๆ เกี่ยวกับ IT ได้ที่ SiamCafe Blog นะครับ

เปรียบเทียบกับทางเลือกอื่น

Elasticsearch ไม่ได้มีอยู่ตัวเดียว ยังมี Search Engine ตัวอื่นๆ ที่น่าสนใจเหมือนกัน เช่น Apache Solr, Algolia หรือแม้แต่ Database เองก็มีฟังก์ชันค้นหาข้อมูล แต่ Elasticsearch มีข้อดีหลายอย่างที่ทำให้มันโดดเด่นกว่าใครเพื่อน

Apache Solr เป็น Search Engine ที่เก่าแก่กว่า Elasticsearch แต่ Elasticsearch ใช้งานง่ายกว่าและ Scale ได้ดีกว่า Algolia เป็น Search as a Service ที่ใช้งานง่าย แต่มีค่าใช้จ่ายสูงกว่า Elasticsearch ส่วน Database ก็สามารถค้นหาข้อมูลได้ แต่ประสิทธิภาพไม่ดีเท่า Elasticsearch

Search Engine ข้อดี ข้อเสีย
Elasticsearch ใช้งานง่าย, Scale ได้ดี, Open Source Learning Curve สูง
Apache Solr ฟังก์ชันหลากหลาย, Mature Config ซับซ้อน
Algolia ใช้งานง่าย, Search as a Service ค่าใช้จ่ายสูง

สรุปแล้ว Elasticsearch เป็น Search Engine ที่คุ้มค่าที่สุดตัวหนึ่ง ถ้าต้องการระบบค้นหาข้อมูลที่มีประสิทธิภาพและ Scale ได้ Elasticsearch คือตัวเลือกที่น่าสนใจมากๆ ลองศึกษาเพิ่มเติมได้จาก SiamCafe Blog นะครับ

Best Practices / เคล็ดลับจากประสบการณ์

เอาล่ะ มาถึงส่วนที่สำคัญที่สุดแล้ว เคล็ดลับที่ผมสั่งสมมาตลอด 20 กว่าปีในการทำ IT มาเนี่ย บอกเลยว่าสำคัญมากๆ โดยเฉพาะถ้าคิดจะเอา Elasticsearch ไปใช้จริงจัง

สมัยผมทำร้านเน็ต SiamCafe เนี่ย ข้อมูลมันไม่ได้เยอะเท่าสมัยนี้หรอก แต่ก็ต้องจัดการให้ดี Search ให้ลูกค้าเจอง่ายๆ ไม่งั้นโดนบ่นแน่นอน

เทคนิคที่ 1: Indexing Strategy is KEY!

เรื่อง Indexing เนี่ยสำคัญสุดๆ เหมือนเราจัดหมวดหมู่หนังสือในห้องสมุดนั่นแหละ ถ้าจัดไม่ดี หาอะไรก็ไม่เจอ

เคยเจอเคสลูกค้า Index มั่วซั่วมาก พอ Search จริงๆ ช้าเป็นเต่า ผมเลยแนะนำให้ลองคิดก่อนว่า User จะ Search หาอะไร แล้วค่อยออกแบบ Index ให้ตอบโจทย์


PUT /my_index
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "thai"
      },
      "content": {
        "type": "text",
        "analyzer": "thai"
      },
      "created_at": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss"
      }
    }
  }
}

Code นี้คือตัวอย่างการสร้าง Index โดยกำหนด Data type และ Analyzer ให้เหมาะสม เช่น ภาษาไทยก็ต้องใช้ Analyzer ที่รองรับภาษาไทย

เทคนิคที่ 2: Optimize your queries

Query ที่เขียนไม่ดี ก็เหมือนคนพูดจาวกวน Elasticsearch ก็งงเหมือนกัน ทำให้ Search ช้าลง

ผมแนะนำให้ใช้ Boolean Query ให้เป็นประโยชน์ เลือกใช้ Filter ให้ถูกประเภท ถ้าต้องการความแม่นยำสูง ก็ใช้ Term Query แทน Match Query


GET /my_index/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "คำที่ต้องการค้นหา" }}
      ],
      "filter": [
        { "range": { "created_at": { "gte": "2023-01-01", "lte": "2023-12-31" }}}
      ]
    }
  }
}

จาก Code จะเห็นว่าเราใช้ must เพื่อหาคำที่ต้องการ และใช้ filter เพื่อกรองวันที่ ทำให้ได้ผลลัพธ์ที่แม่นยำและรวดเร็ว

เทคนิคที่ 3: Monitoring and Tuning

Elasticsearch ไม่ใช่ว่า Setup ครั้งเดียวแล้วจบ ต้องคอย Monitor Performance อยู่เสมอ

ผมเคยเจอ Elasticsearch กิน CPU เกิน 100% เพราะ Memory ไม่พอ สุดท้ายต้องเพิ่ม RAM ให้เครื่องถึงจะหาย

เครื่องมือ Monitoring ที่แนะนำก็มีพวก Kibana, Grafana หรือจะใช้ Plugin ของ Elasticsearch เองก็ได้ SiamCafe Blog มีบทความสอนใช้ Kibana อยู่ ลองไปอ่านดู

เทคนิคที่ 4: อย่าลืม Backup!

อันนี้สำคัญมาก Backup ข้อมูลเป็นเรื่องที่ห้ามละเลย ไม่ว่า Database อะไรก็แล้วแต่

ลองนึกภาพว่าข้อมูล Search ทั้งหมดหายไปเพราะ Harddisk เจ๊ง ลูกค้าจะด่าขนาดไหน

Elasticsearch มีระบบ Snapshot/Restore ในตัว ใช้งานง่ายมาก อย่าลืมตั้ง Schedule Backup เป็นประจำ

FAQ คำถามที่พบบ่อย

Elasticsearch เหมาะกับงานอะไรบ้าง?

Elasticsearch เหมาะกับงาน Search เป็นหลัก Search log, Search product, Search content ใน Website ได้หมด

แต่ก็สามารถเอาไปทำ Analytics ได้ด้วย เพราะ Elasticsearch มี Aggregation Function ที่ทรงพลัง

Elasticsearch กับ Database ต่างกันยังไง?

Database เน้น Transaction, CRUD (Create, Read, Update, Delete) ส่วน Elasticsearch เน้น Search และ Analytics

เปรียบเทียบง่ายๆ Database เหมือนสมุดบัญชี ส่วน Elasticsearch เหมือน Index ท้ายเล่ม

Elasticsearch ยากไหม?

ถ้า Setup แบบ Basic ก็ไม่ยาก แต่ถ้าต้องการ Optimize Performance หรือ Scale ให้รองรับ User จำนวนมาก ก็ต้องศึกษาเพิ่มเติม

สมัยผมทำร้านเน็ต ก็ต้องเรียนรู้เองหมด ไม่มีใครสอน แต่สมัยนี้มี Course Online เยอะแยะ หาเรียนได้ง่ายกว่าเดิมเยอะ iCafeForex ก็มีสอนนะ ลองไปดู

สรุป

Elasticsearch เป็น Search Engine ที่ทรงพลังและยืดหยุ่นมาก เหมาะกับ Project ที่ต้องการ Search ที่รวดเร็วและแม่นยำ

แต่ก็ต้องศึกษาและทำความเข้าใจ Concept ของมันให้ดีก่อนใช้งานจริง หวังว่าบทความนี้จะเป็นประโยชน์กับทุกคนนะครับ