Index Sorting — 쓰기 비용을 미리 치르고 정렬 쿼리를 조기 종료시킨다
Elasticsearch Index Sorting 및 Watcher 공식 문서 종합 (웹 리서치, 2026) — Elastic 공식 문서(index-settings/sorting), 공식 블로그(optimizing-sort-queries), Watcher 공식 문서(how-watcher-works) Elastic 공식문서 Index sorting settings, 공식 블로그 Optimizing sort queries
이 모듈을 다 읽으면
- 인덱스 정렬이 세그먼트 안의 물리적 문서 순서를 미리 정해둔다는 것과, 이것이 조기 종료를 가능하게 하는 이유를 설명할 수 있다
- 인덱스 정렬이 쓰기 성능에 주는 대가를 설명할 수 있다
elasticsearch-learn-02에서 다룬 세그먼트(Lucene 불변 저장 단위)를 전제로, 그 세그먼트 안 문서의 물리적 순서를 색인 시점에 미리 정해둬 이후 정렬 쿼리를 극적으로 빠르게 만드는 Index Sorting을 정리한다.
index.sort.* 설정 — 세그먼트 안 문서 순서를 색인 시점에 고정한다
인덱스를 새로 만들 때 index.sort.field/index.sort.order 설정으로, 각 샤드 안의 세그먼트에 문서가 어떤 필드 기준·어떤 순서로 물리적으로 저장될지를 지정할 수 있다 — 예를 들어 sort.field를 date로, sort.order를 desc로 지정하면 최신 문서가 세그먼트 안에서 물리적으로 앞쪽에 오게 된다. 여러 필드를 배열로 지정해 다단계 정렬 기준도 가능하다.
핵심 포인트
- index.sort.field/index.sort.order로 색인 시점에 세그먼트 안 문서의 물리적 저장 순서를 지정 — 여러 필드 배열로 다단계 정렬도 가능
조기 종료(early termination) — 정렬 기준이 일치하면 끝까지 안 봐도 된다
색인 순서가 실제로 자주 쓰는 검색의 정렬 기준과 일치하면, elasticsearch-learn-24에서 다룬 search_after 같은 정렬 검색에서 극적인 효과를 낸다 — 예를 들어 track_total_hits를 false로 두고 '최근 10개 이벤트'만 찾는 쿼리라면, 각 세그먼트가 이미 그 순서대로 정렬돼 있으니 앞에서 10개를 찾는 즉시 그 세그먼트의 나머지는 더 볼 필요 없이 조기 종료할 수 있다. 이런 조기 종료가 잘 맞아떨어지면 정렬 검색의 지연을 자릿수 단위로(order of magnitude) 줄일 수 있다.
핵심 포인트
- 검색 정렬 기준이 색인 순서와 일치하면, 원하는 개수를 찾는 즉시 그 세그먼트의 나머지를 더 안 보고 조기 종료 — track_total_hits=false와 함께 쓸 때 효과 극대화
- 잘 맞아떨어지면 정렬 검색 지연을 자릿수 단위로 줄일 수 있음
대가 — 쓰기 성능이 크게 떨어질 수 있다
이 이점은 공짜가 아니다. 정렬된 값을 디스크에 저장하는 작업은 정렬 안 된 값을 저장하는 것보다 색인 시점에 훨씬 많은 작업을 요구한다 — 경우에 따라 쓰기 성능이 40~50%까지 떨어질 수 있다는 게 공식 블로그가 밝힌 수치다. 그래서 index sorting은 쓰기가 잦지 않고 특정 정렬 기준의 검색이 압도적으로 많은 워크로드(예: 최신 로그 조회가 주 쿼리 패턴인 시계열 인덱스)에 선택적으로 적용해야 하는 트레이드오프다.
핵심 포인트
- 정렬된 값을 저장하는 색인 작업이 훨씬 무거워 쓰기 성능이 최대 40~50%까지 떨어질 수 있음
- 쓰기가 잦지 않고 특정 정렬 기준 검색이 압도적으로 많은 워크로드(예: 최신 로그 조회 중심 시계열 인덱스)에 선택적으로 적용