이글은 공식 문서, 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를 알아보자
만약 위의 user 필드가 nested로 선언되었다면 각각의 객체가 따로 내부의(Nested) Document로 만들어진다. 즉 루씬 기준으로 배열 안의 개별 object가 개별 문서로 분리된다.
따라서 이제 Alice, Smith를 가진 개별 도큐먼트를 존재하지 않기 때문에 아무런 Document가 Hit되지 않게된다.