Joining query

엘라스틱서치와 같은 분산 시스템에서 전통적인 SQL의 조인 연산을 수행하는 것은 굉장히 큰 비용이 든다.

부모/자식 관계 형태로 모델링해야하는 경우가 있는데, 이러한 경우에 SQL 조인과 비슷한 기능을 하는 Nested 쿼리와 has_child, has_parent 쿼리를 제공한다.

Nested 쿼리

nested 쿼리는 nested 타입의 필드를 포함하고 있는 문서에서 각 중첩구조를 마치 독립적인 문서처럼 질의할수 있도록 한다. 쿼리와 매칭되면 부모 도큐먼트는 반환한다.

path 옵션으로 중첩된 필드를 명시하고, query 옵션에 nested 필드검색에 사용할 쿼리를 명시한다.

GET /my_index/_search
{
    "query": {
        "nested": {
            "path": "obj1",
            "query": {
                "bool": {
                    "must": [
                        { "match": { "obj1.name": "blue" } },
                        { "range": { "obj1.count": { "gt": 5 } } }
                    ]
                }
            }
        }
    }
}