본 포스팅은 2024년 06월 13일을 기준으로 작성되었습니다.
Nested 타입이 기존 Object 타입과 어떻게 다른지, 또 Nested 타입에 대한 query와 aggregation에 대한 설명입니다.
User 필드 안에 두 sub필드를 별다른 형식 지정 없이 2가지 서로 다른 묶음으로 넣습니다.
user.first와 user.last에 대해 검색합니다. 이 때 두 필드의 결과값은 서로 다른 묶음 안에 있습니다.
Object 타입의 경우 서로 다른 묶음 안에 있어도 위와 같이 매칭되어 검색 결과가 반환됩니다.
그러나 보통의 경우에는, 같은 묶음 안에서 매칭되는 경우를 원할겁니다.
데이터를 넣기 전 user필드를 미리 nested 타입으로 설정하고, 동일하게 데이터를 넣습니다.
Nested 타입으로 설정하면 root 필드 안에 여러 개의 묶음이 있어도 하나의 묶음 안에서만 매칭되도록 검색할 수 있습니다.
해당 인덱스 처럼 netsted 타입의 필드 안의 sub필드로 또 다른 nested 타입의 필드를 설정할 수도 있습니다.
Nested 타입의 필드를 검색하기 위한 전용 쿼리가 존재합니다. 그냥 검색하면 결과가 반환되지 않습니다.
query 아래 nested 설정을 넣어줍니다. 해당 nested 설정 아래 path(root필드)와 추가적인 하위 query 설정이 포함됩니다.
추가로, nested는 object 타입과 다르게 두 sub필드가 한 묶음 안에 있어야 검색됩니다. user.first: "John" 과 user.last: "Smith"는 같은 묶음 안에 있기에 검색되었습니다.
nested 타입의 필드에 대한 집계를 수행할 수 있는 전용 bucket aggregations 기능도 존재합니다.
nested aggs 아래에 path로 root 필드를 지정해준 뒤, sub aggs를 추가하여 해당 nested 타입의 필드에 대한 원하는 집계를 진행하면 됩니다.