정적 관련성 시그널
원본 보기정적 관련성 시그널을 점수에 반영하기
많은 도메인에는 관련성과 상관관계가 있다고 알려진 정적 시그널이 존재합니다. 예를 들어 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)"
}
}
}
}
pagerank은 Numeric으로 매핑되어야 합니다
반면 rank_feature 쿼리를 사용하면 아래와 같습니다:
GET _search
{
"query": {
"bool": {
"must": {
"match": { "body": "elasticsearch" }
},
"should": {
"rank_feature": {
"field": "pagerank",
"saturation": {
"pivot": 10
}
}
}
}
}
}
pagerank은rank_feature필드로 매핑되어야 합니다
두 방식 모두 비슷한 점수를 반환하지만 트레이드오프가 있습니다. script_score는 유연성이 매우 높아 텍스트 관련성 점수와 정적 시그널을 원하는 방식으로 결합할 수 있습니다. 반면 rank_feature 쿼리는 정적 시그널을 점수에 반영하는 방법을 몇 가지만 제공합니다. 하지만 이 쿼리는 rank_feature 및 rank_features 필드를 활용하는데, 이 필드들은 값을 특별한 방식으로 색인하여 rank_feature 쿼리가 경쟁력 없는 문서를 건너뛰고 쿼리의 상위 매치를 더 빠르게 가져올 수 있게 해 줍니다.