티스토리 뷰
날짜 타입 (date)
- 자동으로 날짜로 인식하는 형식 : ISO8601
- format 옵션을 이용한 날짜 형식 지정
객체 타입 (object, nested)
- object 와 nested 타입 비교
- nested 쿼리 이용
위치 정보 타입 (geo_point, geo_shape)
- geo_point 가 지원하는 다양한 입력 형식
- 위치정보 쿼리 : geo_distance, geo_bounding_box
검색엔진을 사용하는 여러 서비스들 중에 요즘은 모바일 기기들을 이용해서 위치 정보를 표시하거나 검색하는 서비스들이 많이 있습니다. Elasticsearch는 자바와 기타 프로그래밍 언어에서 제공하는 기본 데이터 타입 외에도 여러가지의 추상화 된 데이터 타입들이 있습니다. 그 중에 이런 위치정보를 저장할 수 있는 Geo Point 와 Geo Shape 같은 타입들이 있습니다.
Geo Point
Geo Point 는 위도(latitude)와 경도(longitude) 두 개의 실수 값을 가지고 지도 위의 한 점을 나타내는 값입니다. Geo Point 필드의 값들은 다음과 같이 다양한 방법으로 입력이 가능합니다.
# object 형식으로 geo_point 입력
PUT my_locations/_doc/1
{
"location": {
"lat": 41.12,
"lon": -71.34
}
}
# text 형식으로 geo_point 입력
PUT my_index/_doc/2
{
"location": "41.12,-71.34"
}
# geohash 형식으로 geo_point 입력
PUT my_index/_doc/3
{
"location": "drm3btev3e86"
}
# 실수의 배열 형식으로 geo_point 입력
PUT my_index/_doc/4
{
"location": [
-71.34,
41.12
]
}
geo_point 를 mapping 하지 않으면 제대로 사용이 불가능합니다.


location 밑에 각각 float 형식으로 되어있기때문에 mapping 을 미리 정의해주셔야합니다.
PUT my_geo
{
"mappings": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
쿼리로 하는걸 하기위해 일단 데이터를 넣어볼게요.
geo_bounding_box 쿼리
Elasticsearch에는 위치정보를 검색할 수 있는 다양한 쿼리들이 있습니다. geo_point 값의 검색에 주로 사용 되는 것은 geo_bounding_box 쿼리와 geo_distance 쿼리 입니다. 예제 위해 먼저 다음 도큐먼트들을 my_geo 인덱스에 벌크로 입력하겠습니다. location 필드의 타입을 "type": "geo_point" 로 매핑을 먼저 설정해야 하는 것을 잊지 마세요.
PUT my_geo/_bulk
{"index":{"_id":"1"}}
{"station":"강남","location":{"lon":127.027926,"lat":37.497175},"line":"2호선"}
{"index":{"_id":"2"}}
{"station":"종로3가","location":{"lon":126.991806,"lat":37.571607},"line":"3호선"}
{"index":{"_id":"3"}}
{"station":"여의도","location":{"lon":126.924191,"lat":37.521624},"line":"5호선"}
{"index":{"_id":"4"}}
{"station":"서울역","location":{"lon":126.972559,"lat":37.554648},"line":"1호선"}
geo_bounding_box 쿼리는 top_left 와 bottom_right 두 개의 옵션에 각각 위치점을 입력하고 이 점들을 토대로 그린 네모 칸 안에 위치하는 도큐먼트들을 불러옵니다. 다음은 {"lat": 37.4899, "lon": 127.0388}, {"lat": 37.5779, "lon": 126.9617} 두 점을 기준으로 하는 네모 영역 안에 있는 도큐먼트들을 가져오는 예제입니다.
GET my_geo/_search
{
"query": {
"geo_bounding_box": {
"location": {
"bottom_right": {
"lat": 37.4899,
"lon": 127.0388
},
"top_left": {
"lat": 37.5779,
"lon": 126.9617
}
}
}
}
}
geo_distance 쿼리
geo_distance 쿼리는 하나의 위치점을 찍고 distance 옵션을 이용해서 입력한 반경의 원 안에 있는 도큐먼트들을 불러옵니다. 다음은 {"lat": 37.5358, "lon": 126.9559} 기준으로 반경 5킬로미터 안에 있는 도큐먼트들을 불러오는 예제입니다.
GET my_geo/_search
{
"query": {
"geo_distance": {
"distance": "5km",
"location": {
"lat": 37.5358,
"lon": 126.9559
}
}
}
}
geo_shape 는 가이드북 참고해주시길 바랍니다.
참고
'ELK 스택' 카테고리의 다른 글
Elasticsearch - 인덱스 재색인 : 필드 매핑 개선 (0) | 2022.11.08 |
---|---|
Filebeat - Logstash - Elasticsearch 예제 (0) | 2022.11.08 |
Elasticsearch - 인덱스 매핑과 데이터 타입 날짜, 객체, 위치정보 (2) (0) | 2022.11.07 |
Elasticsearch - 인덱스 매핑과 데이터 타입 날짜, 객체, 위치정보 (1) (0) | 2022.11.07 |
Elasticsearch - 인덱스 매핑과 데이터 타입 문자열, 숫자 (2) (0) | 2022.11.07 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 문자
- InteiilJ
- pm2-logrotate
- 키바나
- index 처리를 잘하자
- ArrayList
- ElasticSearach 백업
- string
- EL
- Mappings
- Query
- NextJS 14
- config
- Java
- Mapping
- kibana
- Linux
- literal sql
- list
- 인덱스
- logstash
- 명령어
- 재색인
- bool
- react
- 절대 경로 설정하기
- GIT
- React18
- mysql은 nl이 기본 세팅
- Elasticsearch
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함