目前使用的elasticsearch版本是7.17.7
有一個index,其中mapping的內容如下:
{"city" : {"aliases" : { },"mappings" : {"properties" : {"city" : {"type" : "keyword"},"location" : {"type" : "geo_point"}}}}
}
其中location字段的類型設置為geo_point
,可以傳遞經緯度。
支持的數據格式如下,ES會自動將lon
轉化為經度,lat
轉化為維度:
{"city":"鄣山大峽谷風景區","location": {"lon": "118.74", "lat": "30.08"}}
{"city":"九寨溝風景區","location": {"lon": "103.91", "lat": "33.26"}}
{"city":"水繪園","location": {"lon": "120.56", "lat": "32.39"}}
{"city":"關山國家地質公園八里溝園區","location": {"lon": "113.58", "lat": "35.59"}}
{"city":"Sapu Padidu","location": {"lon": "125.266937", "lat": "5.91722"}}
{"city":"將軍石山莊","location": {"lon": "130.11", "lat": "47.23"}}
{"city":"Saipan","location": {"lon": "145.7", "lat": "15.1"}}
{"city":"六峰山","location": {"lon": "109.28", "lat": "22.41"}}
{"city":"小河古村評梅景區","location": {"lon": "113.64", "lat": "37.84"}}
根據矩形搜索
輸入的是矩形形狀的左上經緯度和右下經緯度,查詢語句如下:
{"query": {"bool": {"must": {"match_all": {}},"filter": {"geo_bounding_box": {"location": {"top_left": {"lat": 左上緯度,"lon": 左上經度},"bottom_right": {"lat": 右下緯度,"lon": 右下經度}}}}}}
}
es會將包含在當前矩形范圍內的city
搜索出來。
根據圓形和半徑搜索
es還支持根據圓形和半徑來搜索數據:
搜索語句如下:
{"query": {"bool": {"must": {"match_all": {}},"filter": {"geo_distance": {"distance": str(距離) + "m","distance_type": "arc","_name": "optional_name","location": {"lat": 圓心的緯度,"lon": 圓心的經度}}}}}
}
其中distance
指的是半徑的大小,單位可以是m
、km
等等。會將當前半徑下面的所有點搜索出來。