概念
大家平時肯定經常美團、餓了嗎類似的外賣軟件。她其中最常見的功能就是附件的商家的功能。她這功能就能借助es來實現。
es中的地理位置數據類型:該類型的字段接受經緯度對,進行使用。
常見的使用場景
- 在邊界框內,中心點一定距離內或多邊形內找到地理點
- 以
地理位置
或距中心點
的距離彙總文檔 - 將距離整合到文檔的相關性分數中
- 按
距離
對文檔進行排序
示例使用
1、映射定義示例如下。
PUT example
PUT example/docs/_mapping
{
"properties":{
"cityId":{"type": "long"},
"cityName":{"type": "text"},
"location":{"type": "geo_point"},
"remark":{"type": "text"}
}
}
2、新增文檔示例如下。
PUT example/docs/1
{
"cityId":1,
"cityName":"xi'an",
"location": {
"lat":"34.45",
"lon":"107.40"
},
"remark":"中國旅遊城市"
}
PUT example/docs/2
{
"cityId":2,
"cityName":"Singapore",
"location": "1.05,104.60",
"remark":"世界港口"
}
PUT example/docs/3
{
"cityId":3,
"cityName":"Sydney",
"location": [151.12, -33.51],
"remark":"澳洲大城"
}
2、搜索示例如下。
我們可以看得出來,geo_point
類型的字段有至少有三種形式的添加方式。
- 用
lat
和lon
鍵表示爲對象的地理位置 - 以字符串形式表示的地理位置,格式爲:"
lat,lon
" - 表示爲數組的地理位置,格式爲:
[lon,lat]
測試數據已經添加進去,搜索時怎麼使用呢。如下
我們假設這樣一個需求,搜索在指定經緯度區域的城市有哪些?
GET example/docs/_search
{
"query":{
"geo_bounding_box": {
"location":{
"top_left":{
"lat": 50,
"lon": 110
},
"bottom_right":{
"lat": -40,
"lon": 179
}
}
}
}
}
有關geo-point
的搜索後面會有專門的小節來講解。我們在這裏重點在於理解geo-point
類型的定義和基礎用法。