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 ) |