Strategy

Strategy 카테고리의 모든 포스트 - 한국어

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)