정적 관련성 시그널

원본 보기

정적 관련성 시그널을 점수에 반영하기

많은 도메인에는 관련성과 상관관계가 있다고 알려진 정적 시그널이 존재합니다. 예를 들어 PageRank와 url 길이는 쿼리와 무관하게 웹 페이지의 점수를 조정하기 위해 웹 검색에서 흔히 사용되는 두 가지 특성입니다.

정적 점수 기여분을 BM25 등으로 계산한 텍스트 관련성과 결합할 수 있는 주요 쿼리는 두 가지입니다:

예를 들어 pagerank 필드가 있고 이를 BM25 점수와 결합해 최종 점수가 score = bm25_score + pagerank / (10 + pagerank)가 되도록 하고 싶다고 가정해 봅시다.

script_score 쿼리를 사용하면 쿼리는 다음과 같습니다:

				GET index/_search
					{
  "query": {
    "script_score": {
      "query": {
        "match": { "body": "elasticsearch" }
      },
      "script": {
        "source": "_score * saturation(doc['pagerank'].value, 10)"
      }
    }
  }
}
		
  1. pagerankNumeric으로 매핑되어야 합니다

반면 rank_feature 쿼리를 사용하면 아래와 같습니다:

				GET _search
					{
  "query": {
    "bool": {
      "must": {
        "match": { "body": "elasticsearch" }
      },
      "should": {
        "rank_feature": {
          "field": "pagerank",
          "saturation": {
            "pivot": 10
          }
        }
      }
    }
  }
}
		
  1. pagerankrank_feature 필드로 매핑되어야 합니다

두 방식 모두 비슷한 점수를 반환하지만 트레이드오프가 있습니다. script_score는 유연성이 매우 높아 텍스트 관련성 점수와 정적 시그널을 원하는 방식으로 결합할 수 있습니다. 반면 rank_feature 쿼리는 정적 시그널을 점수에 반영하는 방법을 몇 가지만 제공합니다. 하지만 이 쿼리는 rank_featurerank_features 필드를 활용하는데, 이 필드들은 값을 특별한 방식으로 색인하여 rank_feature 쿼리가 경쟁력 없는 문서를 건너뛰고 쿼리의 상위 매치를 더 빠르게 가져올 수 있게 해 줍니다.