⚡ 검색 성능 향상 팁
이 문서는 Elasticsearch에서 검색 쿼리 성능을 높이기 위한 실전 팁들을 정리한 문서입니다.
대용량 데이터 환경에서도 효율적인 검색을 유지하려면 반드시 알아야 할 핵심 항목들을 포함합니다.
1. 🔍 filter와 must의 분리
✅ must
vs filter
비교
항목 | must | filter |
---|---|---|
점수(score) | 계산함 | 계산 안 함 |
캐시 활용 | 거의 불가능 | ✅ 캐시 가능 |
목적 | relevance 기반 검색 | 조건 필터링 (정확 매칭 등) |
📌 Tip: 가능한 조건은 filter
로 분리하여 쿼리 성능 향상
"bool": {
"must": [
{ "match": { "title": "카카오" } }
],
"filter": [
{ "term": { "status": "published" } }
]
}
2. 📦 _source 필드 최소화
_source
는 document 전체를 반환하는 필드- 필요한 필드만 지정하여 I/O 비용 절감 가능
"_source": ["title", "date"]
📌 예: 수십 개 필드 중 2~3개만 필요할 때 효과적
3. 🧭 sort 필드에 keyword/숫자 사용
- 정렬 시
text
필드는 성능 저하 발생 keyword
,date
,numeric
필드를 정렬 기준으로 설정
📌 예시:
"sort": [
{ "created_at": "desc" }
]
4. 📌 search_after로 페이지네이션
- from + size 방식은 깊은 페이지에서 성능 저하 발생
search_after
사용 시 효율적이며 안정적
"search_after": ["1700000000000"]
- 이전 검색의 마지막 sort 값을 기준으로 다음 페이지 조회
5. 🧪 bulk 처리 최적화
- 문서 삽입/업데이트 시
/_bulk
API를 활용해 여러 문서 일괄 처리 - 단건 처리보다 성능 수십 배 향상
POST /_bulk
{ "index": { "_index": "my-index" } }
{ "title": "문서1", "content": "내용1" }
{ "index": { "_index": "my-index" } }
{ "title": "문서2", "content": "내용2" }
✅ 요약 정리
전략 항목 | 핵심 요약 |
---|---|
filter 적극 사용 | relevance 계산 불필요한 조건은 filter 로 처리 |
_source 제한 | 필요한 필드만 응답으로 받아 속도 개선 |
정렬 필드 최적화 | keyword , numeric , date 타입 필드를 정렬 기준으로 사용 |
search_after 활용 | 깊은 페이지네이션에서 안정적인 대안 |
/_bulk 처리 | 대량 데이터 삽입/수정 시 일괄 처리로 성능 향상 |