จากงานเดิมใช้งาน RediSearch เกี่ยวการค้นหาข้อมูล (Full text search) ไปแล้ว
ต่อมามี use case ต้องทำการค้นหาข้อมูล Geolocation (lat,lng) นั่นเอง
โดยมีความต้องการดังนี้
- ยังค้นหาแบบ full text search ในข้อมูลจาก property ต่าง ๆ ได้
- หาข้อมูลที่อยู่ใกล้
- เรียงลำดับจากใกล้ไปไกลได้
- กำหนดจำนวนข้อมูลที่ต้องการ
มาดูกันว่าทำอย่างไรได้บ้างใน Redis นั่นเอง
ขั้นตอนการออกแบบและทดลองใน Redis เป็นดังนี้
ขั้นตอนที่ 1 ทำการเตรียมข้อมูลที่ต้องการค้นหา
ประกอบไปด้วย property ต่าง ๆ ที่ต้องการเก็บเพื่อค้นหา และ กรองข้อมูล
รวมทั้งข้อมูล location (lat, lng) นั่นเอง
แต่ใน Redis + GEO type นั้นเป็น lng, lat นะ ตรงนี้ต้องระวัง
ในส่วนนี้เก็บข้อมูลในรูปแบบของ HASH ดังนี้
[gist id="b0cc980e9642f57c03d3891c93a30da8" file="1.txt"]ขั้นตอนที่ 2 ทำการสร้าง index เพื่อทำการค้นหา
[gist id="b0cc980e9642f57c03d3891c93a30da8" file="2.txt"]ขั้นตอนที่ 3 ทำการค้นหาผ่าน FT.SEARCH
ตรงนี้จะซับซ้อนขึ้นมาหน่อย เนื่องจากต้องการ
- ค้นหา location ที่อยู่ในระยะทางที่ต้องการ
- ทำการเรียงลำดับตามระยะทางได้ด้วย
เพียงเท่านี้ก็ใช้งาน RediSearch สำหรับ use case นี้ได้แล้ว