You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
공식 문서 (elastic.co/docs) 기반 학습 자료
개념 이해 → 실무 예제 → 빠른 참조 3단 구성
검증 버전: Elasticsearch 8.x / 9.x (LTS 8.17 기준, 일부 9.x 변경 사항 표기)
폴더 구조
elasticSearch-guide/
├── chapters/ ← 개념 학습 (1~11장)
├── examples/ ← 실무 도메인 예제 (검색, 로그, 시계열 등)
├── troubleshooting/ ← 실수 케이스 스터디 (12개 케이스)
└── cheatsheets/ ← 빠른 참조 (Query DSL, Mapping, ILM 등)
추천 학습 경로
🟢 초심자: "Elasticsearch가 뭔지 감 잡기"
chapters/ch01_elasticsearch_overview.md (왜 쓰는가, 검색 엔진 vs DB)
↓
chapters/ch03_lucene_internals.md (Inverted Index = 검색의 기본)
↓
chapters/ch05_mapping_and_field_types.md (필드 타입과 매핑)
↓
examples/01_product_search.md (실제 예제로 이해)
1. text와 keyword를 구분하라
→ 검색은 text, 정확매칭/정렬/집계는 keyword
→ 둘 다 필요하면 multi-field 사용
2. Dynamic mapping을 운영에서 풀어두지 마라
→ "strict" 또는 "false"로 명시적 매핑 사용
→ 매핑은 한번 정해지면 변경 불가 (re-index 필요)
3. 샤드는 적게, 크게 (10~50GB 권장)
→ 작은 샤드 수만 개 = oversharding = 메타데이터 폭주
→ 너무 큰 샤드 = recovery 느림, hot spot
4. Replica는 가용성과 검색 처리량을 위한 것
→ 색인 처리량을 위한 것이 아님
5. ILM/Data Stream으로 인덱스 lifecycle 관리
→ 시계열은 무조건 Data Stream
색인 원칙
1. Bulk API로 배치 색인 (5~15MB 페이로드)
→ 단건 색인은 처리량의 적
2. Refresh interval은 워크로드에 맞게
→ 실시간 검색이 필요 없으면 30s~60s
→ 대용량 적재 시 -1 (수동) 후 일괄 refresh
3. Translog durability
→ 장애 허용도에 따라 request / async 선택
쿼리 원칙
1. Filter context를 적극 활용
→ 점수 계산 불필요한 조건은 filter (캐시됨)
2. Deep pagination 금지
→ search_after 또는 PIT(Point In Time) 사용
3. Wildcard, regex는 prefix/suffix만
→ leading wildcard("*foo")는 사실상 풀스캔
4. text 필드에 fielddata 켜지 마라
→ 정렬/집계가 필요하면 keyword 멀티필드 추가
5. 큰 결과는 _source 필요한 것만 (`_source` filtering)