ElasticSearch Nested vs Object

Jiny's 개발 일기·2023년 11월 1일
0

Objects

이글은 공식 문서, https://esbook.kimjmin.net/07-settings-and-mappings/7.2-mappings/7.2.5-object-nested 를 참조하였다.

ES는 역인덱스 구조를 가지고 있다. 따라서 인덱스의 Document Mapping을 어떻게 가져가는가에 따라 같은 Object를 넣어도 전혀 다른 Document가 생성될 수 있다. 예를 들어보자.

여기 인덱스 설정에서 user 필드가 Object로 설정되어있다.

PUT my-index-000001/_doc/1
{
  "group" : "fans",
  "user" : [ 
    {
      "first" : "John",
      "last" :  "Smith"
    },
    {
      "first" : "Alice",
      "last" :  "White"
    }
  ]
}

만약 user 필드가 Object로 설정되어 있다면 docuement는 아래의 모습으로 만들어진다.

{
  "group" :        "fans",
  "user.first" : [ "alice", "john" ],
  "user.last" :  [ "smith", "white" ]
}

이렇게 되면 만약 query가 match절에 Alice, Smith 이렇게 들어갔을 때에는 아무것도 나오면 안되는데 위의 Document가 아마 match가 되어서 결과로 나올 것이다.

내 생각에는 object라는 것은 결국 '하나의 object Array를 통째로 하나의 Document로 인식하겠다'라고 표현하는 것과 같다고 생각한다. 다음으로 Nested를 알아보자

Nested

만약 위의 user 필드가 nested로 선언되었다면 각각의 객체가 따로 내부의(Nested) Document로 만들어진다. 즉 루씬 기준으로 배열 안의 개별 object가 개별 문서로 분리된다.

따라서 이제 Alice, Smith를 가진 개별 도큐먼트를 존재하지 않기 때문에 아무런 Document가 Hit되지 않게된다.

profile
옛날 블로그 주소 : https://jeongjin984.github.io/

0개의 댓글

Powered by GraphCDN, the GraphQL CDN