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 | 문자열 배열(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이에요.