AWS

AWS OpenSearch DSL(Query Domain-Specific Language)

차간단 2024. 11. 1. 16:59
반응형

1. 기본 검색 쿼리: match

  • match 쿼리는 기본적으로 필드에서 단어를 검색하는데 사용. 특정 필드의 텍스트 검색
{
    "query": {
        "match": {
            "field_name": "search text"
        }
    }
}

2. 다중 필드 검색: multi_match

  • 여러 필드에서 같은 검색어를 찾고자 할 때 multi_match를 사용
  • fields에 가중치 추가 가능
{
    "query": {
        "multi_match": {
            "query": "search text",
            "fields": ["field1", "field2^2"]
        }
    }
}

3. 필터 쿼리: bool

  • bool 쿼리는 must, should, must_not 조건을 통해 복잡한 논리 검색이 가능
{
    "query": {
        "bool": {
            "must": [
                { "match": { "field1": "value1" }},
                { "range": { "field2": { "gte": 10, "lte": 20 }}}
            ],
            "must_not": [
                { "match": { "field3": "unwanted_value" }}
            ],
            "should": [
                { "match": { "field4": "optional_value" }}
            ]
        }
    }
}

4. 집계 쿼리: aggregations

  • 집계 쿼리는 데이터 분석에 사용되며, terms, avg, min, max 등 다양한 집계 옵션을 제공
{
    "aggs": {
        "field_terms": {
            "terms": { "field": "field_name" }
        },
        "average_value": {
            "avg": { "field": "numeric_field" }
        }
    }
}

5. 정렬: sort

  • 검색 결과를 특정 필드를 기준으로 정렬할 때 사용
{
    "query": {
        "match_all": {}
    },
    "sort": [
        { "field_name": { "order": "asc" }}
    ]
}

6. 페이지네이션: from과 size

  • 검색 결과의 페이지를 지정하고 결과 개수를 조정
{
    "query": {
        "match_all": {}
    },
    "from": 0,
    "size": 10
}

7. Match Phrase Query

  • match_phrase는 주어진 문구와 정확히 일치하는 구문 검색을 수행합니다. 연속된 단어를 포함한 검색이 필요한 경우에 유용합니다.
{
    "query": {
        "match_phrase": {
            "field_name": "exact phrase search"
        }
    }
}

8. Range Query

  • 특정 범위 내 값을 찾고자 할 때 사용합니다. 날짜나 숫자 필드에 유용합니다.
{
    "query": {
        "range": {
            "numeric_field": {
                "gte": 10,
                "lte": 100
            }
        }
    }
}

9. Term Query

  • 정확히 일치하는 값을 찾을 때 사용합니다. 단어나 키워드의 특정 값이 필요할 때 사용하며, 토큰화(tokenization) 없이 정확한 값을 찾습니다.
{
    "query": {
        "term": {
            "field_name": "exact_value"
        }
    }
}

10. Wildcard Query

  • 부분 일치와 패턴 검색을 위해 *와 ?를 사용하여 특정 패턴에 따라 검색합니다. 성능에 영향을 미칠 수 있으므로 제한적으로 사용합니다.
{
    "query": {
        "wildcard": {
            "field_name": "start*end"
        }
    }
}

11. Exists Query

  • 특정 필드가 존재하는 문서만 조회하는 경우 사용합니다.
{
    "query": {
        "exists": {
            "field": "field_name"
        }
    }
}

12. Nested Query

  • 중첩된 객체 필드를 검색할 때 사용합니다. OpenSearch는 nested 타입 필드를 별도의 서브 도큐먼트로 관리하므로 nested 쿼리를 사용해야 정확한 매칭이 가능합니다.
{
    "query": {
        "nested": {
            "path": "nested_field",
            "query": {
                "bool": {
                    "must": [
                        { "match": { "nested_field.sub_field": "value" }}
                    ]
                }
            }
        }
    }
}

13. Function Score Query

  • 필드 값이나 특정 조건에 따라 점수를 가중치로 주어 정렬할 때 사용합니다. 예를 들어 최근 날짜의 문서에 더 높은 점수를 주는 경우 유용합니다.
{
    "query": {
        "function_score": {
            "query": { "match": { "field_name": "search text" }},
            "functions": [
                {
                    "gauss": {
                        "date_field": {
                            "origin": "now",
                            "scale": "10d",
                            "offset": "5d",
                            "decay": 0.5
                        }
                    }
                }
            ],
            "boost_mode": "multiply"
        }
    }
}

14. Highlighting

  • 검색어에 일치하는 텍스트를 하이라이트하여 보여줍니다.
{
    "query": {
        "match": {
            "field_name": "highlight this text"
        }
    },
    "highlight": {
        "fields": {
            "field_name": {}
        }
    }
}

15. Scripted Fields

  • 스크립트를 사용해 계산된 필드를 생성할 수 있습니다. 특정 조건에 따라 필드를 계산하여 결과에 추가하는 경우 유용합니다.
{
    "query": {
        "match_all": {}
    },
    "script_fields": {
        "computed_field": {
            "script": {
                "source": "doc['numeric_field'].value * 2"
            }
        }
    }
}
반응형