搜索引擎-应用篇(地理位置查询)
生活随笔
收集整理的這篇文章主要介紹了
搜索引擎-应用篇(地理位置查询)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、背景
查詢附近的洗車店
二、原理探究
像Redis和ES都支持GEO來存儲地理位置。
GEO類型
- 地理點(geo_point),即經(jīng)緯度查詢,
- 地理形狀查詢(geo_shape),即支持點、線、圈、多邊形查詢
GeoHash
GeoHash 原理探究
Elasticsearch:理解 Elastic Maps 中的 geohash 及其聚合
Elasticsearch的默認等級是9,也就是精準到4.8米左右。
Elasticsearch官方并不建議我們修改精度,這可能會導致系統(tǒng)大幅度的變慢,在實際開發(fā)過程中,測試將精度等級調(diào)整至11級,查詢多邊形交疊數(shù)據(jù)返回時長高達4-8秒,難以應用生產(chǎn)環(huán)境。
三、實戰(zhàn)
(1)創(chuàng)建索引
PUT my_location {"mappings": {"properties": {"location":{"type": "geo_point"}}} }(2)插入數(shù)據(jù)
數(shù)據(jù)范圍要求:
- 緯度范圍是-9090之間,經(jīng)度范圍是-180180之間。
- 經(jīng)緯度數(shù)據(jù)都是浮點數(shù)或字符串
- 最大精度:小數(shù)點后7位。(常用小數(shù)點后6位即可。)
查詢分為filter和query
- 使用query來搜索geo_point數(shù)據(jù)效率相對會慢一些。
- 建議使用filter來過濾geo_point數(shù)據(jù)
(3)查詢(某個矩形框內(nèi))
GET /my_location/_search {"query": {"bool": {"must": {"match_all": {}},"filter": {"geo_bounding_box": {"location": {"top_left": {"lat": 31.265395,"lon": 121.444075},"bottom_right": {"lat": 31.253845,"lon": 121.468417}}}}}} }(4)查詢某個點附近 X 千米 - 附近搜索
pin就是指定當前的經(jīng)緯度
distance是距離
geo_distance是圓圈的形式
(5)聚合分析 - 重點
- unit是距離單位,常用單位有:米(m),千米(km),英里(mi)
- distance_type是統(tǒng)計算法:sloppy_arc默認算法、arc最高精度、plane最高效率
四、參考鏈接&案例
【DSL】
附近的門店
ES7.16.2高級搜索之geo_point地理位置(四)
圖靈學院 ElasticSearch課程
【GEO】
GeoHash實現(xiàn)
【JAVA API】
Springboot整合ES地理位置查詢
【Redis】
spring-boot-redis-geo
總結(jié)
以上是生活随笔為你收集整理的搜索引擎-应用篇(地理位置查询)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 磁盘满了如何扩容
- 下一篇: QT下以ADO连接ORACLE数据库