Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

RediSearch กับ Geolocation

$
0
0

จากงานเดิมใช้งาน 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 ที่อยู่ในระยะทางที่ต้องการ
  • ทำการเรียงลำดับตามระยะทางได้ด้วย
[gist id="b0cc980e9642f57c03d3891c93a30da8" file="3.txt"]

เพียงเท่านี้ก็ใช้งาน RediSearch สำหรับ use case นี้ได้แล้ว


Viewing all articles
Browse latest Browse all 1997

Trending Articles