Screen Shot 2557-05-14 at 11.54.39 AM
หลังจากที่ทำความรู้จักเกี่ยวกับความสามารถการตัดคำภาษาไทย
ซึ่งเป็นความสามารถของ ElasticSearch แล้ว
ในบทความเรามาดูความสามารถเรื่อง Auto Suggestion กันบ้าง
โดยความสามารถนี้ก็มีมาให้เช่นกัน มีประสิทธิภาพการทำงานที่ดีขึ้น
รวมทั้งใช้งานง่ายมาก ดังนั้นมาลองใช้งานกันดูดีกว่า

ความรู้พื้นฐาน

ใน ElasticSearch นั้นได้เพิ่มความสามารถชื่อว่า completion suggester
โดยเราสามารถค้นหาข้อมูลจากการพิมพ์ข้อมูลไปทีละตัวอักษรกันเลย
การทำงานก็มีประสิทธิภาพที่ขึ้นมากกว่าเดิม

ถ้าใครเคยใช้พวก Lucene และ Apache Solr น่าจะเคยใช้ความสามารถนี้
แต่การจัดการจะใช้การดคงข้อมูลแบบ query แบบ like ในการดึงข้อมูลจากฐานข้อมูล
และ ngram  ซึ่งทั้งสองวิธีนี้ใช้ทรัพยากรของระบบสูง มีปัญหาในเรื่องความเร็วในการดึงข้อมูล
ดังนั้นใน ElasticSearch จึงสร้างระบบ suggestion ขึ้นมาใหม่
ทำให้ระบบสามารภทำงานได้รวดเร็วขึ้น และสามารถทำงานในลักษณะ realtime ได้เลย

ในเรื่องของความเร็วนั้น เกิดขึ้นได้เนื่องจาก
ทำการเก็บข้อมูลไว้ในหน่วยความจำ ซึ่งเรียกว่า FST ( Finite State Transducers )

ตัวอย่างข้อมูล hotel, marriot, mercure, munchen และ munich
จะทำการเก็บข้อมูลในรูปแบบดังรูป
Screen Shot 2557-05-31 at 10.54.55 AM

ไม่รอช้าไปดูกันดีกว่า ว่าสามารถใช้งานความสามารถนี้ได้อย่างไร

1. ทำการสร้าง index ใหม่ขึ้นมาก่อน
ใน index นี้ประกอบไปด้วย properties ต่างๆ ดังนี้
province_id, province_code, province_name และ province_name_suggest
โดย property ที่สำคัญคือ province_name_suggest มีชนิดเป็น completion
ซึ่งใช้สำหรับการค้นหาข้อมูลที่เราต้องการในระบบ Auto Suggestion นะ
สร้างด้วยคำสั่งดังนี้

ผลจากการสร้าง index ชื่อว่า suggestion ดังรูป

Screen Shot 2557-05-31 at 11.02.58 AM

2. ทำการ import ข้อมูลจังหวัดเข้าไปยัง index
ซึ่งจะมีข้อมูลจังหวัดต่างๆ ในประเทศไทยดังนี้

Screen Shot 2557-05-31 at 11.04.31 AM

3. เมื่อข้อมูลทุกอย่างเรียบร้อย มาทดลองดึงข้อมูลตามที่ต้องการดีกว่า
เริ่มต้นด้วยการดึงข้อมูลจังหวัดที่ขึ้นต้นด้วยคำว่า นคร ด้วยคำสั่งดังนี้

ผลการดึงข้อมูลเป็นดังรูป

Screen Shot 2557-05-31 at 11.08.18 AM

จากผลการค้นหานั้น พบว่าจะพบข้อมูลจังหวัดที่ขึ้นต้นด้วยคำว่า นคร
แต่ว่าจำนวนมีเพียง 5 จังหวัดเท่านั้น ขาดจังหวัดนครสวรรค์ไป
ถ้าเราต้องการเพิ่มจำนวนผลลัพธ์
สามารถเพิ่มด้วยการระบุขนาดข้อมูลไปได้ดังนี้

เพียงเท่านี้เราก็สามารถสร้างระบบ Auto Suggestion ด้วย ElasticSearch แบบง่ายๆ ได้แล้ว

Reference Website
You complete me