Geopoint 필드 타입

Geopoint 필드 타입

geo_point 필드 타입은 위도와 경도로 지정된 지리적 점(위치)을 담는 데 사용해요. 지도 위 한 지점을 표현할 때 쓴다고 보면 돼요.

출처: 문서

본문

예시

geopoint 필드 타입으로 매핑을 만들어 볼게요.

PUT testindex1
{
  "mappings": {
    "properties": {
      "point": {
        "type": "geo_point"
      }
    }
  }
}

형식 (Formats)

geopoint는 다음과 같은 형식으로 색인할 수 있어요.

  • 위도와 경도를 가진 객체
PUT testindex1/_doc/1
{
  "point": { 
    "lat": 40.71,
    "lon": 74.00
  }
}
  • "위도,경도" 형식의 문자열
PUT testindex1/_doc/2
{
  "point": "40.71,74.00" 
}
  • geohash
PUT testindex1/_doc/3
{
  "point": "txhxegj0uyp3"
}
  • [경도, 위도] 형식의 배열
PUT testindex1/_doc/4
{
  "point": [74.00, 40.71] 
}
  • "POINT(경도 위도)" 형식의 Well-Known Text POINT
PUT testindex1/_doc/5
{
  "point": "POINT (74.00 40.71)"
}
  • 좌표가 [경도, 위도] 형식인 GeoJSON 형식
PUT testindex1/_doc/6
{
  "point": {
    "type": "Point",
    "coordinates": [74.00, 40.71]
  }
}

파라미터 (Parameters)

geopoint 필드 타입이 받는 파라미터는 다음 표와 같아요. 모든 파라미터는 선택 사항이에요.

파라미터 설명
ignore_malformed 잘못된 형식의 값(malformed value)을 무시하고 예외를 던지지 않도록 지정하는 불리언 값이에요. 위도의 유효 값 범위는 [-90, 90]이고, 경도의 유효 값 범위는 [-180, 180]이에요. 기본값은 false예요.
ignore_z_value 좌표가 3개인 점에만 해당해요. ignore_z_value가 true면 세 번째 좌표는 색인되지 않지만 _source 필드에는 계속 저장돼요. false면 예외가 발생해요.
null_value null 대신 사용할 값이에요. 필드와 같은 타입이어야 해요. 이 파라미터를 지정하지 않으면 값이 null일 때 필드가 없는(missing) 것으로 처리돼요. 기본값은 null이에요.

파생 소스 (Derived source)

인덱스가 derived source를 사용하면, OpenSearch는 원래 입력 형식과 관계없이 geopoint 값을 일관된 위도/경도 객체 형식으로 정규화해서 소스 재구성 시 사용해요. OpenSearch는 다중 값 geopoint 필드를 정렬할 수도 있고, 변환 과정에서 정밀도 손실이 발생할 수 있어요.

derived source를 활성화하고 geo_point 필드를 구성한 인덱스를 만들어 볼게요.

PUT sample-index1
{
  "settings": {
    "index": {
      "derived_source": {
        "enabled": true
      }
    }
  },
  "mappings": {
    "properties": {
      "geo_point": {
        "type": "geo_point"
      }
    }
  }
}

geohash 형식의 문서를 인덱스에 색인해 볼게요.

PUT sample-index1/_doc/1
{
  "geo_point": "txhxegj0uyp3"
}

OpenSearch가 _source를 재구성한 뒤의 파생 _source는 다음과 같아요.

{
  "geo_point": {"lat": 40.71, "lon": 74.00}
}

Well-Known Text 형식의 문서를 인덱스에 색인해 볼게요.

PUT sample-index1/_doc/2
{
  "geo_point": "POINT (74.00 40.71)"
}

OpenSearch가 _source를 재구성한 뒤의 파생 _source는 다음과 같아요.

{
  "geo_point": {"lat": 40.71, "lon": 74.00}
}

여러 geopoint를 가진 문서를 인덱스에 색인해 볼게요.

PUT sample-index1/_doc/3
{
  "geo_point": [
    {"lat": 75.98, "lon": 40.34},
    {"lat": -90, "lon": -80}
  ]
}

OpenSearch가 _source를 재구성한 뒤의 파생 _source는 정렬된 값과 잠재적인 정밀도 변화를 보여줘요.

{
  "geo_point": [
    {
      "lat": -90.0,
      "lon": -80.00000000931323
    },
    {
      "lat": 75.97999997902662,
      "lon": 40.339999962598085
    }
  ]
}

더 알아보기 (Learn more)