Elasticsearch 地理數據類型

geo_point

接受經緯度,可以使用:

  1. 在邊框內,中心點一定距離內或多邊形內找到地理點
  2. 以地理位置或距離中心點的距離彙總文檔
  3. 將距離整合到文檔的相關性分數
  4. 按距離對文檔進行排序

添加geo_point的五種方式

  1. latlon鍵表示爲對象的地理位置
  2. 以字符串形式表示的地理位置,格式爲:"lat,lon"
  3. 表示爲geohash的地理位置
  4. 表示爲數組的地理位置,格式爲:[ lon,lat]
  5. 地理點表示爲衆所周知的文本點,其格式爲:"POINT(lon lat)"
  6. 地理邊界框查詢,查找位於該框內的所有地理點

字符串地理位置按排序lat,lon,而數組地理位置按相反的順序排序:lon,lat

一個點可以表示爲geohash。Geohash是交錯的緯度和經度的位的base32編碼的字符串。geohash中的每個字符都會增加5位精度。因此,哈希越長,它越精確。爲了進行索引,將目標哈希值轉換爲緯度-經度對。在此過程中,僅使用前12個字符,因此在geohash中指定超過12個字符不會提高精度。12個字符提供60位,這應該將可能的錯誤減少到2cm以下。

PUT geo_data
{
  "mappings": {
    "properties": {
      "location": {
        "type": "geo_point"
      }
    }
  }
}

PUT geo_data/_doc/1
{
  "text": "Geo-point as an object",
  "location": { 
    "lat": 41.12,
    "lon": -71.34
  }
}

PUT geo_data/_doc/2
{
  "text": "Geo-point as a string",
  "location": "41.12,-71.34" 
}

PUT geo_data/_doc/3
{
  "text": "Geo-point as a geohash",
  "location": "drm3btev3e86" 
}

PUT geo_data/_doc/4
{
  "text": "Geo-point as an array",
  "location": [ -71.34, 41.12 ] 
}

PUT geo_data/_doc/5
{
  "text": "Geo-point as a WKT POINT primitive",
  "location" : "POINT (-71.34 41.12)" 
}

GET geo_data/_search
{
  "query": {
    "geo_bounding_box": { 
      "location": {
        "top_left": {
          "lat": 42,
          "lon": -72
        },
        "bottom_right": {
          "lat": 40,
          "lon": -74
        }
      }
    }
  }
}

geo_point 接受參數

  1. ignore_malformed,默認爲false。如果爲true,則忽略錯誤的地理位置。如果爲false,如果地理位置錯誤,會觸發異常
  2. ignore_z_value,默認爲true。如果爲true,將接受三維位置,但僅僅索引緯度和經度。如果爲false,則不接受,如果爲多餘二維的位置,會觸發異常
  3. null_value,接受顯示null值的geopoint。默認爲null,表示幹字段被視爲丟失。

geo_shape 數據類型

這種數據類型,方便索引和搜索任意形狀的矩形和多邊形。當正在索引的數據或正在執行的查詢包含除點以外的其他形狀時,應使用它。
geo_json幾何對象映射到geo_shape類型。要啓用它,用戶必須將字段顯示映射到geo_shape類型

接受參數

  1. orientation,可選)定義如何解釋多邊形/多多邊形的頂點順序。此參數定義兩個座標系規則(右手或左手)之一,可以用三種不同的方式來指定每個規則。1.右手規則:right,ccw,counterclockwise,2,左手定則:left,cw,clockwise。默認方向(counterclockwise)符合OGC標準,該標準定義了逆時針順序的外圈頂點和順時針順序的內圈頂點(孔)。在geo_shape映射中設置此參數會顯式設置geo_shape字段的座標列表的頂點順序,但可以在每個單獨的GeoJSONWKT文檔中覆蓋。
  2. ignore_malformed,如果爲true,則會忽略格式錯誤的GeoJSONWKT形狀。如果爲假(默認),則格式錯誤的GeoJSONWKT形狀會引發異常並拒絕整個文檔。
  3. ignore_z_value,如果true(默認)將接受三個維度點(存儲在源中),但僅索引緯度和經度值;第三維被忽略。如果爲false,則包含不超過緯度和經度(二維)值的地理位置會引發異常並拒絕整個文檔。
  4. coerce,如果爲true,未封閉時,則多邊形中的線性環將自動封閉。
  5. type, 必須的。下面表格中Elasticsearch 對應參數
  6. coordinates,必須的。字段值

GeoJSON and WKT 和 Elasticsearch 數據類型對應關係

GeoJSON WKT Elasticsearch 描述
Point POINT point 單個座標位置;Elasticsearch 僅使用WGS-84座標。
LineString LINESTRING linestring 給定兩個或兩個以上點的任意線
Polygon POLYGON polygon 一個封閉的多邊形,其第一個點和最後一個點必須匹配,因此需要n + 1頂點創建一個帶n邊的多邊形和一個最小的4頂點。
MultiPoint MULTIPOINT multipoint 一組未連接但可能相關的點。
MultiLineString MULTILINESTRING multilinestring 單獨的線串數組。
MultiPolygon MULTIPOLYGON multipolygon 一組單獨的多邊形。
GeometryCollection GEOMETRYCOLLECTION geometrycollection 與JSON形狀相似的GeoJSON形狀, multi*但可以同時存在多種類型(例如,Point和LineString)。
BBOX envelope 通過僅指定左上和右下點指定的邊界矩形或信封。
circle 由中心點和半徑指定的圓,單位爲,默認爲METERS

請求示例

更多示例查看官方文檔

POST /example/_doc
{
    "location" : {
        "type" : "circle",
        "coordinates" : [101.0, 1.0],
        "radius" : "100m"
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章