Field Collapsing — 검색 결과를 그룹당 하나로 접는다
Elasticsearch Field Collapsing 및 Transform API 공식 문서 종합 (웹 리서치, 2026) — Elastic 공식 문서(collapse-search-results, transform-overview, transform-limitations) Elastic 공식문서 Collapse search results
이 모듈을 다 읽으면
- collapse가 top hits에만 적용되고 집계에는 영향을 주지 않는다는 것을 설명할 수 있다
- inner_hits로 각 그룹 안의 추가 문서를 함께 받아오는 방법을 설명할 수 있다
elasticsearch-learn-05의 Query DSL(문서를 찾는 조건)을 전제로, 찾은 결과를 특정 필드 기준으로 그룹핑해 그룹당 대표 문서 하나만 남기는 collapse 기능을 정리한다.
collapse 조건 — 단일값 keyword/숫자 필드, doc_values 필요
collapse에 쓸 필드는 반드시 단일 값을 갖는 keyword 또는 숫자 필드여야 하고, doc_values가 활성화돼 있어야 한다(다중값 필드나 text 필드는 불가). collapse는 실제 검색 결과(top hits)에만 적용되고, 같은 요청에 포함된 집계(aggregation)에는 영향을 주지 않는다 — 즉 집계는 collapse 여부와 무관하게 원본 전체 문서를 대상으로 계산된다는 점을 헷갈리면 안 된다.
핵심 포인트
- collapse 필드 조건: 단일값 keyword/숫자 필드 + doc_values 활성화 필수(다중값·text 필드 불가)
- collapse는 top hits에만 적용 — 같은 요청의 집계(aggregation)는 collapse와 무관하게 원본 전체 대상으로 계산됨
inner_hits — 그룹당 대표 하나 말고 여러 개를 함께 받는다
collapse만 쓰면 그룹당 문서 하나만 반환되지만, inner_hits 옵션을 함께 지정하면 각 그룹 안에서 몇 개의 문서를 어떤 정렬 기준으로 더 가져올지(name/size/sort)를 지정할 수 있다 — 예를 들어 '카테고리별 대표 상품 하나'가 아니라 '카테고리별 최신 상품 3개'를 한 번에 가져오는 식이다. 다만 그룹 수가 많거나 inner_hits 요청을 여러 개 함께 걸면 검색이 상당히 느려질 수 있어 주의가 필요하고, max_concurrent_group_searches로 이 단계의 동시 검색 수를 제어할 수 있다.
핵심 포인트
- inner_hits로 각 collapse 그룹 안에서 여러 문서(name/size/sort 지정)를 함께 조회 가능 — '그룹당 대표 3개' 같은 요청 가능
- 그룹 수가 많거나 inner_hits 요청이 여러 개면 검색이 느려질 수 있음 — max_concurrent_group_searches로 동시성 제어
total hits와 2단계 collapse
응답의 total hits는 collapse를 적용하지 않았을 때의 전체 매칭 문서 수를 나타낸다 — 즉 화면에 보이는 그룹 개수와 total 값은 다르다는 점을 실무에서 헷갈리기 쉽다. 또한 2단계 collapse도 지원된다 — 한 필드로 먼저 그룹핑하고, 그 안에서 inner_hits를 다시 다른 필드로 collapse하는 중첩 구조까지 가능하다.
핵심 포인트
- total hits는 collapse 미적용 시 전체 매칭 문서 수(그룹 개수와 다름) — 화면 표시와 total 값 차이에 주의
- 2단계 collapse 지원: 한 필드로 그룹핑 후 inner_hits 안에서 다른 필드로 다시 collapse하는 중첩 구조도 가능