[엘라스틱서치] 지도를 표현하는 두가지 방법 - forewalk/elastic GitHub Wiki
Elasticsearch
map
엘라스틱서치에서 지도를 display하는 방법은 두 가지가 있다. 일반적으로 geo_point를 데이터로 받아 표현할 수 있는 방법이 있고, geo_shape를 받아서 표현할 수 있는 방법이 있는데, geo_shape를 받아서 표현한다는 것은 예를 들면 이런 것이다. '경기'라고 하는 keyword를 데이터로 받는다면, 경기 지역에 해당하는 영역을 geo_shape로 지정한다. 여러개의 array형태의 geo_shape 형태를 받아 point들을 연결하고 이를 영역으로 지정하면 '경기'라고 하는 지역을 표현할 수 있게 된다. 이 shape를 '경기'라고 지정하고 데이터 다큐먼트 중 keyword가 '경기'인 데이터와 join 시켜주게 되면 경기도의 count를 집계할 수 있게 된다.
이는 꼭 시도만 되는 것이 아닌, 시군구나 그 이하도 가능하지만, 하나의 제약조건이 있는데 해당의 keyword가 유니크해야한다는 것이다. 가령 시군구에 '중구'라는 키워드는 여러 시도에 걸쳐 존재하기 때문에, 이를 geo_shape로 지정하게 되면 결국 여러 중구가 모두 count되어버리는 결과를 도출하게 된다. 유니크한 값을 위해 결국 code가 되어야 하며, 이를 위해 ingest를 사용하는 것도 방법일 것이다. 단, geo_shape 같은 경우 데이터를 색인할 때 약간 골때리는데, 아래와 같은 형태로 색인해야 한다. 데이터가 들어간 매핑 형태와 약간 다르다.
PUT /example
{
"mappings": {
"properties": {
"geometry": {
"type": "geo_shape"
},
"name": {
"type": "keyword"
}
}
}
}