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
}
]
}