欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Elasticsearch——Geopoint字段类型

程序员文章站 2022-07-09 15:46:04
...

geo_point类型的字段接受经纬度对,可以使用:

  • 在边界框内、距离中心点一定距离内、多边形内或geo_shape查询内查找地质点的步骤。

  • 按地理位置或距离中心点聚合文档。

  • 将距离整合到文档的相关性得分中。

  • 按距离对文档进行排序。

指定geopoint点有五种方式,如下所示:

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "location": {
        "type": "geo_point"
      }
    }
  }
}


PUT my-index-000001/_doc/1
{
  "text": "Geopoint as an object",
  "location": {  (1)
    "lat": 41.12,
    "lon": -71.34
  }
}


PUT my-index-000001/_doc/2
{
  "text": "Geopoint as a string",
  "location": "41.12,-71.34"  (2)
}


PUT my-index-000001/_doc/3
{
  "text": "Geopoint as a geohash",
  "location": "drm3btev3e86"   (3)
}


PUT my-index-000001/_doc/4
{
  "text": "Geopoint as an array",
  "location": [ -71.34, 41.12 ]   (3)
}



PUT my-index-000001/_doc/5
{
  "text": "Geopoint as a WKT POINT primitive",
  "location" : "POINT (-71.34 41.12)"   (5)
}



GET my-index-000001/_search
{
  "query": {
    "geo_bounding_box": {  (6)
      "location": {
        "top_left": {
          "lat": 42,
          "lon": -72
        },
        "bottom_right": {
          "lat": 40,
          "lon": -74
        }
      }
    }
  }
}




(1)geopoint表示为对象,使用lat和lon关键点。

(2)geopoint表示为字符串,格式为:“lat,lon”。

(3)geopoint表示为geohash。

(4)geopoint表示为 array的格式:[lon,lat]

(5)genpoint表示为 Well-Known Text Point ,用“Point(lon-lat)”格式。

(6)地理边界框查询,用于查找落在该框内的所有地理点。

注意:Geopoints 表示为数组或字符串

请注意,字符串genpoints按lat、lon顺序排列,而阵array geopoints按相反顺序排列:lon、lat。

最初,lat、lon用于数组和字符串,但数组格式在早期已更改,以符合GeoJSON使用的格式。

在脚本(scripts)中使用Geopoints

在scripts中访问某个geopoint的值时,该值将作为GeoPoint对象返回,从而允许分别访问.lat和.lon值:

def geopoint = doc['location'].value;
def lat      = geopoint.lat;
def lon      = geopoint.lon;

出于性能原因,最好直接访问lat/lon值:

def lat      = doc['location'].lat;
def lon      = doc['location'].lon;