elasticsearch score랑 explanation score 다름

개발새발·2023년 6월 18일
0

elasticsearch

목록 보기
52/54

이것도 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번과 같은 점수인지는 더 찾아봐야할 것 같다.

profile
발새발개

0개의 댓글