2023-09-26 22:51:33

오늘은 opensearch의 term, terms, wildcard 쿼리에 대해 살펴보도록 하겠습니다.

 

term 쿼리

opensearch에서 term 쿼리는 어떤 필드에서 정확한 용어를 찾을 때 사용됩니다. 예를 들어서 line_id라는 필드의 값이 "61809"인 문서를 검색하고자 한다면 다음과 같이 쿼리를 작성하면 됩니다. 

 

GET shakespeare/_search
{
  "query": {
    "term": {
      "line_id": {
        "value": "61809"
      }
    }
  }
}

 

opensearch에서 한 문서가 인덱스되면, text 필드는 분석됩니다. 분석 과정에는 토크나이징과 소문자처리 및 구두점 제거를 포함합니다. 쿼리 텍스트를 분석하는 match 쿼리와 다르게, term 쿼리는 용어가 정확하게 매칭되는 문서들을 검색합니다. 따라서, 타당한 결과들은 리턴하지 않습니다. text 필드에 term 쿼리를 사용하는 것을 피해야합니다. 

 

terms 쿼리

terms 쿼리는 동일한 필드에서 여러 개의 용어로 검색하고자 할 때 사용합니다. 예를 들어, line_id라는 필드의 값이 "61809" 또는 "61810"인 문서를 검색하고자 한다면, 쿼리를 다음과 같이 작성하면 됩니다. 

 

GET shakespeare/_search
{
  "query": {
    "terms": {
      "line_id": [
        "61809",
        "61810"
      ]
    }
  }
}

 

wildcard

와일드카드 패턴과 일치하는 용어를 검색하려면 와일드카드 쿼리를 사용하면 됩니다. 예를 들어, speaker 필드의 값이 H로 시작하고 Y로 끝나는 문서들을 검색하려면 다음과 같은 쿼리를 사용하면 됩니다. 

 

GET shakespeare/_search
{
  "query": {
    "wildcard": {
      "speaker": {
        "value": "H*Y",
        "case_insensitive": false
      }
    }
  }
}

 

참고자료

[1] https://opensearch.org/docs/latest/query-dsl/term/term/

[2] https://opensearch.org/docs/latest/query-dsl/term/terms/   

[3] https://opensearch.org/docs/latest/query-dsl/term/wildcard/