{"lat": 41.12, "lon": -71.34}
와 같이 알아보기 편한 object 형식으로 입력합니다.sg
값은 북유럽 스칸디나비아 반도 부근의 크기입니다."type": "geo_point"
로 선언합니다.{ "location": { "lat" : 41.12, "lon": -71.34 } }
와 같은 값을 입력하면 다이나믹 매핑으로 필드가 자동 생성될 때 geo_point 타입의 필드가 생기는 것이 아니라 다음과 같이 float 타입의 lat, lon 두개의 하위 필드가 생깁니다."type": "geo_point"
로 매핑을 먼저 설정해야 하는 것을 잊지 마세요."station" : "강남"
, "station" : "종로3가"
, "station" : "서울역"
총 3개의 결과가 리턴 되었습니다. 위 쿼리 내용을 지도에 표현 해 보면 다음과 같습니다."station" : "여의도"
, "station" : "서울역"
총 2개의 결과가 리턴되었습니다. distance 값을 10km, 20km 등으로 변경해서 다시 쿼리를 해 보면 종로3가, 강남이 결과에 나타나는 것도 확인할 수 있습니다. 위 쿼리를 지도에 표시 해 보면 다음과 같습니다."type": "geo_shape"
으로 선언합니다."type"
값에 각각 다음과 같이 지정하고 "coordinates"
값에 위치 정보를 [ -71.34, 41.12 ] 같이 [경도, 위도] 의 순서로 배열 형식으로 입력합니다. 위치정보 순서가 반대로 되면 엉뚱한 값이 되기 때문에 주의해야 합니다."type": "point"
- 단일 점 입니다. 보통은 geo_point 와 같은 용도로 사용됩니다."type": "multipoint"
- 여러 점을 하나의 값으로 저장합니다. 점들을 배열로 입력합니다."type": "linestring"
- 점 2개 값를 배열로 입력하여 두 점을 잇는 직선을 저장합니다. 비행 경로 등을 저장할때 유용합니다."type": "multilinestring"
- 여러개의 직선을 배열로 입력하여 저장합니다."type": "polygon"
- 다각형을 저장합니다. 내부에 배열을 추가하고 점들을 배열로 입력하며 순서대로 이어집니다. 배열 마지막에는 반드시 처음과 같은 점이 입력되어야 합니다. 영토 정보 등을 저장할때 유용합니다."type": "multipolygon"
- 여러 개의 다각형을 배열로 저장합니다. 미국의 알래스카, 하와이, 본토 등과 같이 분리된 영토를 같이 저장하는데 유용합니다."type": "envelope"
- 바른 각도의 직사각형 영역을 저장할때는 polygon 으로 4개의 점을 입력하여 지정할 수도 있지만, 대신 envelope 을 사용하면 좌측 상단(upper left) 와 우측 하단(lower right) 점 두개만 이용해서 그리는 것도 가능합니다."radius": "5km"
같은 반경을 지정하는 값을 이용해서 "type": "circle"
인 원 형태의 데이터도 사용이 가능했습니다. 버전6.6 부터는 geo_shape 데이터의 저장 방식이 변경되면서 6.6 버전 이후 부터 필자가 글을 쓰고 있는 현재 7.4 버전에서의 원 형태의 데이터는 지원하지 않고 있습니다. 이후 다시 구현 될 가능성은 있습니다."shape": { }
에 검색할 영역의 "type"
과 "coordinates"
값을 입력하고, "relation"
에 검색할 영역과 검색되는 도큐먼트가 겹치거나 포함되는 관계 조건 값을 입력합니다. relation 옵션에 입력 가능한 값은 intersects, disjoint, within 3가지가 있습니다."relation": "intersects"
- 디폴트 값입니다. 쿼리 영역과 도큐먼트 값 영역이 일부라도 겹쳐지면 참 입니다."relation": "disjoint"
- 도큐먼트 값 영역이 쿼리 영역과 겹치지 않는 쿼리 영역 바깥에 있는 도큐먼트들을 가져옵니다."relation": "within"
- 도큐먼트의 값들이 모두 쿼리 영역 안에 완전히 포함 되어 있는 도큐먼트들을 가져옵니다."type": "geo_shape"
으로 지정해야 하는 것을 명심하세요."relation": "intersects"
- 쿼리 영역에 조금이라도 걸쳐 있는 "place" : "경복궁"
과 "place" : "명동"
도큐먼트들이 결과로 나타납니다."relation": "within"
- 쿼리 영역에 완전히 포함되어 있는 "place" : "명동"
도큐먼트만 결과로 나타납니다."relation": "disjoint"
- 쿼리 영역 바깥에 있는 "place" : "홍대"
도큐먼트가 결과로 나타납니다.