Elasticsearch Object타입과 Nested타입
엘라스틱서치의 필드 데이터 타입인 Object과 Nested을 알아보고, 유사한 두 타입의 차이점을 살펴보자. 인덱스 생성 시 매핑 설정을 정확히 하기 위해서는 필드 타입을 잘 이해하는 것이 중요하다.
책 엘라스틱서치 실무 가이드와 엘라스틱서치 공식가이드북를 바탕으로 정리한 포스팅입니다. 내용에 오류가 있다면 댓글로 알려주시면 감사하겠습니다 :)
공식 가이드북 : 7.2.5 Object와 Nested
Object 데이터 타입
JSON 포맷의 object, 즉 객체 타입의 값을 사용할 수 있다. 내부 객체를 계층적으로 포함하고 있는 경우 object 타입 형태로 사용한다. object 타입 정의를 위해 특정 키워드를 사용하지 않고 문서 구조를 입력하면 된다.
Object 타입을 이해하기 위해 아래 예제를 따라가보자.
-
인덱스 생성
PUT 코로나확진자동선/_mapping { "properties": { "이름": { "type": "text" }, "이동경로": { "proferties": { "행정동": { "type": "text" }, "방문지": { "type": "text" }, "방문일시": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss" } } } }
참고로 인덱스명과 필드명은 영어 소문자여야 한다. 편하게 이해하기 위해 한글명을 사용하였다.
-
샘플 데이터 등록
PUT 코로나확진자동선/_doc/1 { "이름": "김꾸러기", "이동경로": [ { "행정동" : "신도림동", "방문지" : "김밥랜드 신도림점", "방문일시" : "2020-04-07 19:30:00" }, { "행정동" : "화곡동", "방문지" : "해피마트 까치산점", "방문일시" : "2020-04-11 21:30:00" } ] }
-
데이터 검색
-
첫번째 검색
- 검색조건 : 행정동:"신도림동", 방문일시:"2020-04-07 ~"
- 검색결과 : 문서ID 1인 "김꾸러기" 가 조회됨
-
두번째 검색
- 검색조건 : 행정동:"신도림동", 방문일시가 "2020-04-11 ~"
- 검색결과 : 문서ID 1인 "김꾸러기" 가 조회됨
"김꾸러기"는 "2020-04-11 ~"에 "신도림동"에 가지 않았다. 하지만 Object 내부 연산은 OR 연산으로 이루어지기 때문에 검색 결과로 노출이 되었다.
이러한 이슈를 해결하기 위해 Nested 데이터 타입이 고안되었다.
-
Nested 데이터 타입
Nested 데이터 타입은 Object 객체 배열을 독립적으로 색인하고 질의하는 형태의 데이터 타입이다.
이를 사용하면 중첩된 필드를 검색할 때 정확히 일치하는 문서만 출력 가능함
- 위 예제의 인덱스의 필드가 Nested 타입으로 매핑되었다고 가정하고 데이터를 검색해보자.
- 첫번째 검색
- 검색조건 : 행정동:"신도림동", 방문일시:"2020-04-07 ~"
- 검색결과 : 문서ID 1인 "김꾸러기" 가 조회됨
- 두번째 검색
- 검색조건 : 행정동:"신도림동", 방문일시가 "2020-04-11 ~"
- 검색결과 : 조회되지 않음
- 첫번째 검색
nested 쿼리로 검색하면 nexted 필드의 내부에 있는 값들을 모두 별개의 문서로 취급한다. nested 필드 내 하위 문서는 내부적으로 별도의 도큐먼트로 분리되기 때문에 쿼리 결과에서 상위 도큐먼트와 합쳐져서 보이게 된다. 의도했던 대로 정확히 일치하는 문서만 도출할 수 있게 된 것이다.
참고 : Nested 필드는 nested 쿼리를 사용해야한다.
'데이터 관리 > ElasticSearch' 카테고리의 다른 글
Elasticsearch 유사도 알고리즘(similarity) BM25과 TF/IDF (0) | 2020.05.16 |
---|---|
Elasticsearch 노리(Nori)형태소 분석기의 stoptags 한글 품사 태그 정리 (0) | 2020.04.19 |
Elasticsearch in action 정리 블로그 발견 (0) | 2020.04.18 |
Elasticsearch 대소문자 색인과 검색 keyword tokenizer VS normalizer (0) | 2020.04.17 |
댓글
이 글 공유하기
다른 글
-
Elasticsearch 유사도 알고리즘(similarity) BM25과 TF/IDF
Elasticsearch 유사도 알고리즘(similarity) BM25과 TF/IDF
2020.05.16 -
Elasticsearch 노리(Nori)형태소 분석기의 stoptags 한글 품사 태그 정리
Elasticsearch 노리(Nori)형태소 분석기의 stoptags 한글 품사 태그 정리
2020.04.19 -
Elasticsearch in action 정리 블로그 발견
Elasticsearch in action 정리 블로그 발견
2020.04.18 -
Elasticsearch 대소문자 색인과 검색 keyword tokenizer VS normalizer
Elasticsearch 대소문자 색인과 검색 keyword tokenizer VS normalizer
2020.04.17