Term 쿼리

Term 쿼리

필드에서 정확한 용어를 검색하려면 term 쿼리를 사용해요. term 쿼리는 분석되지 않은 용어를 그대로 일치시키므로 keyword 필드에서 주로 사용해요.

출처: 문서

본문

필드에서 정확한 용어를 검색하려면 term 쿼리를 사용해요. 예를 들어 다음 쿼리는 정확한 줄 번호를 가진 행을 검색해요:

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

문서가 인덱싱될 때 텍스트 필드는 분석돼요. 분석에는 텍스트를 토큰화하고 소문자로 바꾸며 구두점을 제거하는 과정이 포함돼요. 쿼리 텍스트를 분석하는 match 쿼리와 달리, term 쿼리는 정확한 용어만 일치시키므로 관련성 있는 결과를 반환하지 못할 수 있어요. 텍스트 필드에서는 term 쿼리 사용을 피하세요. 자세한 내용은 Term-level and full-text queries compared를 참고하세요. case_insensitive 파라미터에서 쿼리가 대소문자를 구분하지 않도록 지정할 수 있어요:

GET shakespeare/_search
{
  "query": {
    "term": {
      "speaker": {
        "value": "HAMLET",
        "case_insensitive": true
      }
    }
  }
}

OpenSearch 2.x 및 이전 버전에서는 문자의 수에 따라 복잡도가 기하급수적으로 증가해 높은 힙 메모리 사용과 성능 저하를 일으킬 수 있어요. 이를 피하려면 대소문자를 구분하지 않는 검색을 사용하지 마세요. 대신 인덱싱된 필드의 analyzer에 소문자 토큰 필터를 적용하고 소문자 쿼리 용어를 사용하세요. 응답에는 대소문자 차이가 있음에도 일치하는 문서가 포함돼요:

"hits": {
  "total": {
    "value": 1582,
    "relation": "eq"
  },
  "max_score": 2,
  "hits": [
    {
      "_index": "shakespeare",
      "_id": "32700",
      "_score": 2,
      "_source": {
        "type": "line",
        "line_id": 32701,
        "play_name": "Hamlet",
        "speech_number": 9,
        "line_number": "1.2.66",
        "speaker": "HAMLET",
        "text_entry": "[Aside]  A little more than kin, and less than kind."
      }
    },
  ...
}

파라미터 (Parameters)

쿼리는 필드 이름()을 최상위 파라미터로 받아요:

GET _search
{
  "query": {
    "term": {
      "": {
        "value": "sample",
        ...
      }
    }
  }
}

는 다음 파라미터를 받아요. value를 제외한 모든 파라미터는 선택이에요. Parameter Data type Description value | 문자열(String) | 에 지정된 필드에서 검색할 용어예요. 필드 값이 올바른 공백과 대소문자로 용어와 정확히 일치하는 문서만 결과에 반환돼요. boost | 부동 소수점(Floating-point) | 이 필드가 관련성 점수에 기여하는 가중치를 지정하는 부동 소수점 값이에요. 1.0보다 큰 값은 필드의 관련성을 높이고, 0.0과 1.0 사이의 값은 관련성을 낮춰요. 기본값은 1.0이에요. _name | 문자열(String) | 쿼리 태깅(query tagging)을 위한 쿼리 이름이에요. 선택이에요. case_insensitive | 불리언(Boolean) | true이면 value가 인덱싱된 필드 값과 대소문자를 구분하지 않고 일치하도록 허용해요. 기본값은 false예요(대소문자 구분은 필드의 매핑에 따라 결정돼요).

더 알아보기 (Learn more)