심화 쿼리 정리 (실무 중심)

1. 🔧 function_score 쿼리

📌 개념

검색 점수(score)에 함수를 적용해서 가중치(weighting)나 랜덤성 부여

✅ 사용 예시

{
  "function_score": {
    "query": { "match": { "title": "엘라스틱" } },
    "functions": [
      {
        "filter": { "term": { "is_premium": true } },
        "weight": 2
      },
      {
        "random_score": {}
      }
    ],
    "boost_mode": "multiply"
  }
}

💡 실무 활용

  • 프리미엄 콘텐츠 우선 노출
  • 추천 콘텐츠 랜덤성 부여
  • 클릭 수, 조회 수 기반 가중치 조정

⚠️ 주의사항

  • 함수마다 성능 차이 큼 (특히 script 포함 시)
  • boost_mode, score_mode 조정 필요

2. 🧮 script_score 쿼리

📌 개념

커스텀 스크립트로 score 직접 계산

✅ 사용 예시

{
  "script_score": {
    "query": {
      "match": { "tags": "추천" }
    },
    "script": {
      "source": "doc['click_count'].value * 0.7 + doc['like_count'].value * 2"
    }
  }
}

💡 실무 활용

  • 추천/랭킹 알고리즘 점수 커스터마이징
  • 복합 가중치 계산 가능 (클릭, 좋아요, 댓글 등)

⚠️ 주의사항

  • 느림 → 제한적으로 사용
  • 필드 존재 여부 체크 필요
  • painless 문법 숙지 필요

3. 🪄 rescore 쿼리

📌 개념

기존 검색 결과 중 상위 N개 문서에 대해 2차 점수 재정렬

✅ 사용 예시

{
  "query": {
    "match": { "title": "elasticsearch" }
  },
  "rescore": {
    "window_size": 100,
    "query": {
      "rescore_query": {
        "match_phrase": {
          "title": {
            "query": "elasticsearch",
            "slop": 1
          }
        }
      },
      "query_weight": 0.7,
      "rescore_query_weight": 1.2
    }
  }
}

💡 실무 활용

  • 1차 넓은 검색 후 2차 정교화
  • 뉴스, 블로그 등에서 정확도 우선 정렬

⚠️ 주의사항

  • 전체 결과 X → 상위 N개만 재정렬
  • window_size 적절 설정 필요

4. ✨ highlight 쿼리

📌 개념

검색어가 포함된 부분을 하이라이팅(태그) 처리

✅ 사용 예시

{
  "query": { "match": { "content": "엘라스틱" } },
  "highlight": {
    "fields": {
      "content": {}
    },
    "pre_tags": ["<em>"],
    "post_tags": ["</em>"]
  }
}

💡 실무 활용

  • 검색어 강조 UI 구현
  • title, content 등 본문 강조에 활용

⚠️ 주의사항

  • text 필드 전용
  • fragment_size, number_of_fragments 조절 필요

5. ⚖️ boosting 쿼리

📌 개념

특정 조건은 점수 높이고(positive), 특정 조건은 점수 낮춤(negative)

✅ 사용 예시

{
  "boosting": {
    "positive": {
      "match": { "content": "elasticsearch" }
    },
    "negative": {
      "term": { "is_ad": true }
    },
    "negative_boost": 0.2
  }
}

💡 실무 활용

  • 광고 글은 제외는 안 하고 점수만 낮춤
  • 스팸 필터링 대체 수단

⚠️ 주의사항

  • 단순 가중치 조정은 boosting, 복잡한 점수는 function_score로
  • negative_boost 조절 필요

✅ 정리 요약

쿼리 종류용도특징주의점
function_score점수에 함수 적용필터별 가중치, 랜덤성 등 적용 가능boost_mode, script 주의
script_score스크립트 기반 점수 계산점수를 커스터마이징 가능성능 저하, 문법 오류 주의
rescore상위 문서 2차 정렬검색 정교화에 효과적window_size 범위 설정 중요
highlight검색어 강조 표시UI 연동용text 필드 전용, fragment 설정
boosting특정 조건 점수 낮춤부정적 조건 점수 페널티 적용negative_boost 설정 중요