Elasticsearch(021):es常見的字段映射類型之地理點類型(geo-point)

概念

大家平時肯定經常美團、餓了嗎類似的外賣軟件。她其中最常見的功能就是附件的商家的功能。她這功能就能借助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類型的字段有至少有三種形式的添加方式。

  • latlon鍵表示爲對象的地理位置
  • 以字符串形式表示的地理位置,格式爲:"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類型的定義和基礎用法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章