eager_global_ordinals — 집계 비용을 색인 시점으로 미리 당겨온다
Elasticsearch semantic_text/ELSER 및 eager_global_ordinals 공식 문서 종합 (웹 리서치, 2026) — Elastic 공식 문서(mapping-reference/semantic-text, mapping-reference/eager-global-ordinals) Elastic 공식문서 eager_global_ordinals, Improving the performance of high-cardinality terms aggregations
이 모듈을 다 읽으면
- global ordinal이 elasticsearch-learn-06에서 다룬 fielddata 위에서 어떤 역할을 하는지 설명할 수 있다
- eager_global_ordinals가 검색 시점 지연을 색인 시점 비용으로 옮기는 트레이드오프임을 설명할 수 있다
elasticsearch-learn-06에서 다룬 집계·fielddata(필드 값을 메모리에 올려 집계에 쓰는 캐시)를 전제로, keyword 필드의 값을 정수로 매핑하는 global ordinal이 무엇이고, 그 계산 시점을 언제로 옮길 수 있는지를 정리한다.
Global Ordinal — 문자열 값을 정수로 바꿔 집계를 빠르게 한다
keyword 같은 term 기반 필드는 doc values를 저장할 때 ordinal(순서 번호) 매핑을 쓴다 — 사전순으로 각 고유 term에 정수를 하나씩 부여하고, 문서별로는 실제 문자열 대신 이 정수(ordinal)만 저장한다. 집계 시점에 이 ordinal을 쓰면 문자열 비교 대신 정수 비교로 처리할 수 있어 훨씬 빠르다 — elasticsearch-learn-06에서 다룬 fielddata·doc_values 구조 위에서 집계 성능을 크게 끌어올리는 핵심 메커니즘이 바로 이것이다.
핵심 포인트
- keyword 등 term 기반 필드는 doc values 저장 시 각 고유 term에 정수(ordinal)를 부여, 문서별로는 문자열 대신 이 정수만 저장
- 집계 시 이 ordinal로 정수 비교만 하면 돼 문자열 비교보다 훨씬 빠름 — elasticsearch-learn-06 fielddata 구조 위의 핵심 가속 메커니즘
eager_global_ordinals — 검색 시점 비용을 색인 시점으로 옮긴다
기본값(eager_global_ordinals: false)에서는 이 global ordinal 계산이 검색 시점에, 첫 집계·필터 요청이 들어올 때 이뤄진다 — 즉 카디널리티가 높은 필드일수록 그 첫 요청의 지연이 커진다. eager_global_ordinals를 true로 설정하면, 이 계산 시점이 검색 요청 때가 아니라 색인이 refresh될 때(즉 새 세그먼트가 만들어질 때마다)로 앞당겨진다 — 검색 지연은 줄어들지만, 그 대가로 색인(쓰기) 성능에 부정적 영향을 준다는 트레이드오프가 생긴다. 카디널리티가 높은 필드일수록 이 ordinal 테이블을 만드는 데 걸리는 시간도 길어지므로, 그런 필드에 eager 옵션을 켤수록 색인 성능 저하가 더 크게 나타난다.
핵심 포인트
- 기본값(false): global ordinal 계산이 검색 시점(첫 집계·필터 요청)에 발생 — 카디널리티 높을수록 그 요청의 지연이 커짐
- true로 설정: 계산 시점을 refresh(새 세그먼트 생성) 시점으로 앞당김 — 검색 지연 감소 대신 색인 성능 저하라는 트레이드오프, 카디널리티가 높을수록 이 저하폭도 커짐