이것도 query_string을 테스트해보다가 알게되었는데, 나는 explanation.value값으로 score 계산을 하는 걸로 알고 있어서 같은 값이겠지 했는데 실제 explanation.value값과 score값은 다르더라.
{
"_source" : [
"A"
],
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "00이네 bb마켓 냅킨 원피스",
"fields": [
"A"
],
"default_operator": "OR",
"boost": 2
}
}
]
}
},
"sort" : [
{
"_score": {
"order": "desc"
}
}
]
}
{
{// 1번
(생략)
"_score": 30.391758,
"_source": {
"A": "하늘하늘원피스 조합일체형"
}
},
{// 2번
(생략)
"_score": 30.391758,
"_source": {
"A": "테스트1 조합분리형"
}
},
{// 3번
(생략)
"_score": 30.391758,
"_source": {
"A": "나시원피스11조합분리형"
}
}
}
이렇게 했을 때 내 생각에는 검색어 00이네 bb마켓 냅킨 원피스
중 원피스
키워드를 갖고 있는 3번이 2번보다는 점수가 높아야할 것같은데 점수가 같아서 이상하다고 생각했다. (물론 BM25 알고리즘을 좀 더 파봐야겠지만..)
그래서 궁금해서 _explanation
함수로 2번, 3번 문서를 각자 조회해봤는데 3번이 explanation.value
값이 더 높았다… 그리고 위에서 조회한 score
값과 explanation.value
값이 같지 않았다.
확인해보니 Explanation에서 제공되는 value와 실제 score 값이 약간 다를 수 있다고 한다. 이는 Elasticsearch의 내부 계산 및 반올림 등의 이유로 인해 발생할 수 있는 차이라고...
Elasticsearch의 점수 계산은 여러 단계와 요소를 거쳐 이루어지는데, Explanation은 이러한 계산 과정을 자세히 설명하기 위해 제공되며, 각 단계에서 발생한 값들을 상세히 표시하게 되고 이때 Explanation의 value는 해당 계산 단계에서의 점수 값이다. 즉, 계산단계의 점수이기에 최종적인 점수와 약간의 차이가 있을 수 있다고 한다.
실제 점수를 확인하려면 _score
필드를 참조하는 게 맞다.
왜 3번이 2번과 같은 점수인지는 더 찾아봐야할 것 같다.