Vespa 랭킹
Vespa 랭킹 (Ranking)
Vespa는 매칭된 도큐먼트를 **랭킹 프로파일(ranking profile)**을 통해 점수화하고 순서를 정해요. 검색 결과의 품질은 필드 매칭뿐 아니라 랭킹 표현식에서 크게 갈리므로, 랭킹 설계를 잘하는 게 중요해요.
매칭과 랭킹의 분리
Vespa 검색은 두 단계로 나뉘어요. 먼저 쿼리 조건에 매칭되는 도큐먼트를 빠르게 후보로 뽑고(matching), 그 후보들을 랭킹 단계에서 정교한 점수로 정렬해요. 이렇게 하면 검색 속도와 품질을 함께 잡을 수 있어요.
랭킹 프로파일
rank-profile을 스키마에 정의하고, first-phase와 second-phase 표현식을 지정해요. first-phase는 모든 후보에 빠르게 적용하고, second-phase는 상위 후보에만 더 비싼 표현식을 적용해요.
schema doc {
document doc {
field title type string { indexing: index | summary }
field popularity type int { indexing: attribute | summary }
}
rank-profile my_ranking inherits default {
first-phase {
expression: bm25(title) + attribute(popularity)
}
}
}
쿼리에 ranking=my_ranking을 지정하면 이 프로파일을 사용해요.
랭킹 표현식
랭킹 표현식은 랭킹 기능(ranking feature)을 조합해 만들어요. 대표적인 기능은 다음과 같아요.
bm25(field)– BM25 점수attribute(field)– 속성값match(field)– 매칭 정도fieldLength(field)/fieldMatch(field)– 매칭 품질embedding(query, field)– 임베딩 유사도
이들을 더하고 곱하고 비중을 줘서 최종 점수를 설계해요.