심화 쿼리 정리 (실무 중심)
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 설정 중요 |