쿼리 컨텍스트와 필터 컨텍스트
쿼리 컨텍스트와 필터 컨텍스트 (Query and filter context)
쿼리는 쿼리 절(query clause)로 구성되며, 각 절은 필터 컨텍스트(filter context)나 쿼리 컨텍스트(query context)에서 실행될 수 있어요. 필터 컨텍스트의 쿼리 절은 "이 문서가 쿼리 절과 일치하나?"라는 질문을 하고 일치하는 문서를 반환합니다. 쿼리 컨텍스트의 쿼리 절은 "이 문서가 쿼리 절과 얼마나 잘 일치하나?"라는 질문을 하고 일치하는 문서를 반환하면서 각 문서의 관련성을 관련성 점수(relevance score) 형태로 제공해요.
출처: 문서
본문
관련성 점수 (Relevance score)
관련성 점수는 문서가 쿼리에 얼마나 잘 일치하는지 측정해요. OpenSearch가 각 문서의 _score 메타데이터 필드에 기록하는 양의 부동소수점 숫자랍니다.
"hits" : [
{
"_index" : "shakespeare",
"_id" : "32437",
"_score" : 18.781435,
"_source" : {
"type" : "line",
"line_id" : 32438,
"play_name" : "Hamlet",
"speech_number" : 3,
"line_number" : "1.1.3",
"speaker" : "BERNARDO",
"text_entry" : "Long live the king!"
}
},
...
점수가 높을수록 관련성이 높은 문서를 나타내요. 쿼리 유형마다 관련성 점수 계산 방식이 다르지만, 모든 쿼리 유형은 쿼리 절이 필터 컨텍스트에서 실행되는지 쿼리 컨텍스트에서 실행되는지를 고려합니다.
관련성 점수에 영향을 주기를 원하는 쿼리 절은 쿼리 컨텍스트에서 사용하고, 나머지 모든 쿼리 절은 필터 컨텍스트에서 사용하세요.
필터 컨텍스트 (Filter context)
필터 컨텍스트의 쿼리 절은 "이 문서가 쿼리 절과 일치하나?"라는 질문을 하며, 이는 이진(binary) 답을 가져요. 예를 들어 학생 데이터가 있는 인덱스가 있다면 필터 컨텍스트를 사용해 학생에 대한 다음 질문에 답할 수 있어요.
- 학생의 honors 상태가 true로 설정되어 있나요?
- 학생의 graduation_year가 2020–2022 범위 안에 있나요?
필터 컨텍스트에서는 OpenSearch가 관련성 점수를 계산하지 않고 일치하는 문서를 반환해요. 따라서 정확한 값(exact value)을 가지는 필드에는 필터 컨텍스트를 사용하는 것이 좋아요.
쿼리 절을 필터 컨텍스트에서 실행하려면 filter 파라미터에 전달해요. 예를 들어 다음 불리언 쿼리는 2020–2022년에 우등으로 졸업한 학생을 검색해요.
GET students/_search
{
"query": {
"bool": {
"filter": [
{ "term": { "honors": true }},
{ "range": { "graduation_year": { "gte": 2020, "lte": 2022 }}}
]
}
}
}
성능 향상을 위해 OpenSearch는 자주 사용되는 필터를 캐싱해요.
쿼리 컨텍스트 (Query context)
쿼리 컨텍스트의 쿼리 절은 "이 문서가 쿼리 절과 얼마나 잘 일치하나?"라는 질문을 하며, 이는 이진 답을 가지지 않아요. 쿼리 컨텍스트는 전체 텍스트 검색에 적합한데, 일치하는 문서를 받을 뿐만 아니라 각 문서의 관련성도 판별하고 싶기 때문이에요. 예를 들어 셰익스피어 전집이 있는 인덱스가 있다면 다음 검색에 쿼리 컨텍스트를 사용할 수 있어요.
dream이라는 단어를 다양한 형태(dreaming, dreams)와 동의어(contemplate)를 포함해 담고 있는 문서 찾기long live king이라는 단어와 일치하는 문서 찾기
쿼리 컨텍스트에서는 모든 일치 문서가 _score 필드에 관련성 점수를 포함하며, 이를 사용해 문서를 관련성 순으로 정렬할 수 있어요.
쿼리 절을 쿼리 컨텍스트에서 실행하려면 query 파라미터에 전달해요. 예를 들어 다음 쿼리는 shakespeare 인덱스에서 long live king 단어와 일치하는 문서를 검색해요.
GET shakespeare/_search
{
"query": {
"match": {
"text_entry": "long live king"
}
}
}
관련성 점수는 24비트 가수(significand) 정밀도를 가진 단정밀도(single-precision) 부동소수점 숫자예요. 점수 계산이 가수 정밀도를 초과하면 정밀도 손실이 발생할 수 있어요.