Ranking
Ranking 카테고리의 모든 포스트 - 한국어
1개의 포스트
🔁 추천/정확도/최신/인기순 분리 전략
Elasticsearch에서 검색 결과를 다양한 기준으로 정렬하는 전략을 정리한 문서입니다.
사용자의 니즈에 따라 정확도, 인기, 최신, 추천순을 분리하여 검색 품질을 높일 수 있습니다.
1. 🎯 정확도 정렬 (Relevance Based)
전략
multi_match쿼리로 다양한 필드 검색- 중요한 필드에는
boost적용
{
"multi_match": {
"query": "카카오",
"fields": ["title^3", "content", "tags^2"],
"type": "best_fields"
}
}
title필드는^3→ 가장 높은 점수 기여tags는^2→ 중간 가중치
2. 🔥 인기순 정렬 (Popularity Based)
전략
likes,clicks등의 수치 필드를 점수에 반영function_score+field_value_factor사용
{
"function_score": {
"query": {
"match": {
"title": "카카오"
}
},
"functions": [
{
"field_value_factor": {
"field": "likes",
"factor": 1.5,
"modifier": "sqrt",
"missing": 0
}
},
{
"field_value_factor": {
"field": "clicks",
"factor": 0.5,
"modifier": "log1p",
"missing": 1
}
}
],
"score_mode": "sum",
"boost_mode": "replace"
}
}
3. 🕒 최신순 정렬 (Latest First)
전략
createdAt필드로 정렬
{
"sort": [
{ "createdAt": { "order": "desc" } }
]
}
- 최신 문서가 먼저 노출됨
- relevance 점수는 무시됨
4. 🧠 추천순 정렬 (Recommendation Ranking)
전략
- 정확도 × 인기 × 최신성 조합
function_score로 통합 점수 계산
{
"function_score": {
"query": {
"multi_match": {
"query": "카카오",
"fields": ["title^3", "content", "tags^2"]
}
},
"functions": [
{
"field_value_factor": {
"field": "likes",
"factor": 1.2,
"modifier": "sqrt"
}
},
{
"gauss": {
"createdAt": {
"origin": "now",
"scale": "10d",
"decay": 0.5
}
}
}
],
"score_mode": "sum",
"boost_mode": "multiply"
}
}
- 정확도는 기본
_score likes: 인기 점수gauss(createdAt): 최신성 점수multiply로 결합 → 추천순
✅ 요약 정리
| 정렬 기준 | 전략 요약 |
|---|---|
| 정확도순 | multi_match + boost |
| 인기순 | function_score + likes, clicks |
| 최신순 | sort by createdAt desc |
| 추천순 | 정확도 × 인기 × 최신성 조합 (function_score) |