Ranking 사용 가이드

Summary

  • 랭킹 모듈을 이용하면 서비스에 맞도록 문서 속성을 유사도 계산에 반영할 수 있습니다.
  • 랭킹 변수와 랭킹 코드 작성 방법을 설명합니다.
  • 기본 랭킹으로 설정한 모듈은 검색 시 ranking 옵션이 없어도 정렬 옵션에 랭킹 변수를 사용할 수 있습니다.
_ratio=0.5;
_quality=1.0;
_similarity=qds;
_relevance = _similarity * _ratio + _quality * (1 - _ratio);
  • qds : 색인 설정시 기본값으로 적용되는 문서 가중치로 유사도를 말합니다.
  • 적합도(relevance)는 일반적으로 유사도(similarity)와 품질(quality)의 합으로 나타냅니다.
  • 문서 속성의 값을 읽어오는 함수를 이용하여 적용 가능합니다. dp_섹션이름
_ratio=0.5;
_quality= dp_like_cnt * 0.09 + dp_dislike_cnt * 0.01;
_similarity=qds;
_relevance = _similarity * _ratio + _quality * (1 - _ratio);
  • 검색 시 sort 옵션의 parameter 를 _relevance 로 지정합니다.
{
...
  "sort": {
    "_relevance" : "asc|desc"
  }
...
}

Ranking code

  • 하나의 함수 형태로 대입문만 사용합니다.
relevance = qds;
relevance() = qds; // 위와 완전히 같습니다.
relevance( x ) = x*qds;
  • 모든 변수는 내부적으로 타입 (bool | int | double | string) 을 가집니다.
  • 모든 라인을 ; 로 구분하여 문자열로 입력합니다.

표현식

  • 산술 연산자 : +, -, *, /
  • 비교 연산자 : >, <, >=, <=, ==, !=
  • 논리 연산자 : |, &, !
  • 상수 표현 : 정수, 실수, true, false
  • 조건 표현식 : if - then - else
mtr = mtc/qtermc;
quality = 1.0
relevance = if mtr >= 0.6 then qds + quality else quality;

내장 함수

  • min(a, b) : 최소값
  • max(a, b) : 최대값
  • exp(x) : 지수
  • log(x) : 자연로그
  • log10(x) : 로그
  • sqrt(x) : 제곱근
  • pow(x, y) : x의 y제곱

질의 속성

  • qtermc : Query - Term - Count, 질의의 검색어 수, qds 에 가산되는 텀의 수
  • qry_qtermc(query_name) : 특정 질의의 qtermc. 복합 질의의 경우에 개별질의의 qtermc 를 얻기 위해 사용
  • qry_exist(query_name) : query_name 의 이름을 가진 질의가 존재하는지 여부를 반환
  • epoch_time : 질의 실행 시작 시점의 시간.

문서 점수

  • qds : Query - Document - Score. 문서가중치, 질의 문서 유사도.
  • qry_qds(query_name) : 특정 질의의 qds
  • mtc : Matched - Term - Count. 검색 대상 문서의 포함된 질의의 텀 수
  • qry_mtc(query_name) : 특정 질의의 mtc

기타

  • total_document_count : 총 검색 결과 문서 수(추정)
  • 위의 내장 함수들 뿐 아니라, _ 로 시작하는 심볼은 내부용으로 예약되어 있으므로 유의해야 한다.

사용 예제

Ranking code

relevance = min(qry_mtc("q1"), qry_mtc("q2"));
normalized_qds = qds/qtermc;
normalized_qds_of_q1 = qry_qds("q1") / qry_qtermc("q1");
mtratio = mtc/qtermc;

Search query

{
  "search": {
    "index_name": {
      "main": [
        {
          "name": "q1",
          "query": "term"
        },
        {
          "name": "q2",
          "query": "test"
        }
      ]
    }
  },
  "sort" : {
      "relevance": "desc"
  }
}

#

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...