Terms set 쿼리

Terms set 쿼리

terms set 쿼리로 지정된 필드에서 최소한의 정확한 용어 수와 일치하는 문서를 검색할 수 있어요. terms 쿼리와 유사하지만, 문서를 반환하는 데 필요한 최소 일치 용어 수를 지정할 수 있다는 점이 달라요. 이 숫자는 인덱스의 필드나 스크립트로 지정할 수 있어요.

출처: 문서

본문

terms set 쿼리로 지정된 필드에서 최소한의 정확한 용어 수와 일치하는 문서를 검색할 수 있어요. terms_set 쿼리는 terms 쿼리와 유사하지만, 문서를 반환하는 데 필요한 최소 일치 용어 수를 지정할 수 있다는 점이 달라요. 이 숫자는 인덱스의 필드나 스크립트로 지정할 수 있어요. 예시로, 학생 이름과 해당 학생이 수강한 수업을 담은 인덱스를 생각해 봐요. 이 인덱스의 매핑을 설정할 때 문서를 반환하는 데 필요한 최소 일치 용어 수를 지정하는 숫자 필드를 제공해야 해요:

PUT students
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword"
      },
      "classes": {
        "type": "keyword"
      },
      "min_required": {
        "type": "integer"
      }
    }
  }
}

다음으로 학생에 해당하는 두 문서를 인덱싱하세요:

PUT students/_doc/1
{
  "name": "Mary Major",
  "classes": [ "CS101", "CS102", "MATH101" ],
  "min_required": 2
}

PUT students/_doc/2
{
  "name": "John Doe",
  "classes": [ "CS101", "MATH101", "ENG101" ],
  "min_required": 2
}

이제 다음 수업 중 최소 두 개를 수강한 학생을 검색해 봐요: CS101, CS102, MATH101:

GET students/_search
{
  "query": {
    "terms_set": {
      "classes": {
        "terms": [ "CS101", "CS102", "MATH101" ],
        "minimum_should_match_field": "min_required"
      }
    }
  }
}

응답에는 두 문서가 모두 포함돼요:

{
  "took" : 44,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.4544616,
    "hits" : [
      {
        "_index" : "students",
        "_id" : "1",
        "_score" : 1.4544616,
        "_source" : {
          "name" : "Mary Major",
          "classes" : [
            "CS101",
            "CS102",
            "MATH101"
          ],
          "min_required" : 2
        }
      },
      {
        "_index" : "students",
        "_id" : "2",
        "_score" : 0.5013843,
        "_source" : {
          "name" : "John Doe",
          "classes" : [
            "CS101",
            "MATH101",
            "ENG101"
          ],
          "min_required" : 2
        }
      }
    ]
  }
}

문서가 일치해야 하는 최소 용어 수를 스크립트로 지정하려면 minimum_should_match_script 필드에 스크립트를 제공하세요:

GET students/_search
{
  "query": {
    "terms_set": {
      "classes": {
        "terms": [ "CS101", "CS102", "MATH101" ],
        "minimum_should_match_script": {
          "source": "Math.min(params.num_terms, doc['min_required'].value)"
        }
      }
    }
  }
}

파라미터 (Parameters)

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

GET _search
{
  "query": {
    "terms_set": {
      "": {
        "terms": [ "term1", "term2" ],
        ...
      }
    }
  }
}

는 다음 파라미터를 받아요. terms를 제외한 모든 파라미터는 선택이에요. Parameter Data type Description terms | 문자열 배열(Array of strings) | 에 지정된 필드에서 검색할 용어 배열이에요. 필요한 용어 수가 올바른 공백과 대소문자로 문서의 필드 값과 정확히 일치하는 문서만 결과에 반환돼요. minimum_should_match_field | 문자열(String) | 결과에 문서를 반환하는 데 필요한 일치 용어 수를 지정하는 숫자 필드의 이름이에요. minimum_should_match_field 또는 minimum_should_match_script 중 하나를 지정해야 하며, 둘 모두는 안 돼요. minimum_should_match_script | 문자열(String) | 결과에 문서를 반환하는 데 필요한 일치 용어 수를 반환하는 스크립트예요. minimum_should_match_field 또는 minimum_should_match_script 중 하나를 지정해야 하며, 둘 모두는 안 돼요. boost | 부동 소수점(Floating-point) | 이 필드가 관련성 점수에 기여하는 가중치를 지정하는 부동 소수점 값이에요. 1.0보다 큰 값은 필드의 관련성을 높이고, 0.0과 1.0 사이의 값은 관련성을 낮춰요. 기본값은 1.0이에요.

더 알아보기 (Learn more)