매핑
원본 보기매핑
매핑은 문서와 문서에 포함된 필드를 어떻게 저장하고 색인할지 정의하는 과정입니다.
각 문서는 필드의 모음이며, 필드마다 고유한 데이터 타입을 가집니다. 데이터를 매핑할 때는 문서와 관련된 필드 목록을 담은 매핑 정의를 만듭니다. 매핑 정의에는 _source 필드처럼 문서에 연결된 메타데이터의 처리 방식을 지정하는 메타데이터 필드도 포함됩니다.
데이터 여정의 어느 단계에 있는지에 따라 동적 매핑과 명시적 매핑을 사용해 데이터를 정의하세요. 예를 들어 기본값을 사용하고 싶지 않은 필드나 어떤 필드가 생성될지 더 세밀하게 제어하고 싶은 필드는 명시적으로 매핑할 수 있습니다. 그런 다음 나머지 필드는 Elasticsearch가 동적으로 매핑하도록 둘 수 있습니다. 같은 인덱스에서 동적 매핑과 명시적 매핑을 함께 쓰는 방식은 데이터에 알려진 필드와 알려지지 않은 필드가 섞여 있을 때 특히 유용합니다.
7.0.0 이전에는 매핑 정의에 타입 이름이 포함되었습니다. Elasticsearch 7.0.0 이상에서는 더 이상 기본 매핑을 허용하지 않습니다. 자세한 내용은 매핑 타입 제거를 참조하세요.
동적 매핑을 사용하면 Elasticsearch가 문서에 있는 필드의 데이터 타입을 자동으로 감지해 매핑을 생성해 줍니다. 새로운 필드가 포함된 문서를 추가로 색인하면 Elasticsearch가 해당 필드를 자동으로 추가합니다. 최상위 매핑은 물론 내부 object 및 nested 필드에도 필드를 추가할 수 있습니다. 동적 매핑은 빠르게 시작하는 데 도움이 되지만, 필드 타입을 자동으로 추론하기 때문에 특정 사용 사례에서는 최적이 아닌 결과가 나올 수 있습니다.
일치 조건에 따라 동적으로 추가된 필드에 적용되는 사용자 정의 매핑을 정의하려면 동적 템플릿을 사용하세요.
각 필드의 데이터 타입을 지정해 매핑을 정의하려면 명시적 매핑을 사용하세요. 데이터가 색인되는 방식을 사용 사례에 맞게 완전히 제어할 수 있으므로 프로덕션 환경에서 권장되는 방식입니다.
직접 매핑을 정의하면 다음과 같은 작업을 할 수 있습니다.
- 어떤 문자열 필드를 전문 검색 필드로 다룰지 정의합니다.
- 어떤 텍스트 필드를 시맨틱 검색 머신러닝 모델이 자동으로 벡터화할 수 있는지 정의합니다.
- 어떤 필드가 숫자, 날짜, 위치 정보를 담는지 정의합니다.
- 자동으로 감지할 수 없는 데이터 타입(예:
geo_point,geo_shape)을 사용합니다. - 사용자 정의 날짜 형식을 포함해 날짜 값 형식을 선택합니다.
- 동적으로 추가된 필드의 매핑을 제어하는 사용자 정의 규칙을 만듭니다.
- 부분 일치에 맞게 필드를 최적화합니다.
- 언어별 텍스트 분석을 수행합니다.
같은 필드를 목적에 따라 여러 방식으로 색인하면 유용한 경우가 많습니다. 예를 들어 문자열 필드를 전문 검색용 text 필드와 정렬 또는 집계용 keyword 필드로 동시에 색인할 수 있습니다. 또는 사용자 입력이 담긴 문자열 필드의 내용을 처리하기 위해 둘 이상의 언어 분석기를 사용할 수도 있습니다.
재색인 없이 스키마를 변경하려면 런타임 필드를 사용하세요. 런타임 필드를 색인된 필드와 함께 사용하면 리소스 사용량과 성능의 균형을 맞출 수 있습니다. 인덱스 크기는 작아지지만 검색 성능은 느려집니다.
검색 요청에서 런타임 필드 정의하기를 통해 다양한 매핑 옵션을 실험해 보고, 검색 요청 중에 매핑 값을 재정의해 인덱스 매핑 값의 오류를 바로잡을 수도 있습니다.
미리 알고 있는 필드에 대해서는 인덱스 생성 시점에 명시적 매핑을 정의해야 합니다. 데이터가 변화함에 따라 언제든지 매핑에 새 필드를 추가할 수 있습니다.
기존 매핑을 업데이트하려면 Update mapping API를 사용하세요.
대부분의 경우 이미 매핑된 필드의 매핑은 변경할 수 없습니다. 이러한 변경에는 재색인이 필요합니다.
다만 특정 조건에서는 매핑을 업데이트할 수 있습니다.
기존 매핑에 새 필드를 동적으로 또는 명시적으로 언제든지 추가할 수 있습니다.
기존 필드에 새 멀티 필드를 추가할 수 있습니다.
- 매핑 업데이트 이전에 색인된 문서는 업데이트되거나 재색인되기 전까지 새 멀티 필드의 값을 갖지 않습니다. 매핑 변경 이후에 색인된 문서는 새 멀티 필드의 값을 자동으로 갖게 됩니다.
인덱스에 너무 많은 필드를 정의하면 매핑 폭증(mapping explosion)이 발생해 메모리 부족 오류가 나거나 복구하기 어려운 상황에 빠질 수 있습니다.
동적 매핑처럼 새 문서를 넣을 때마다 새 필드가 생기는 상황을 생각해 보세요. 새 필드는 모두 인덱스 매핑에 추가되며, 매핑이 커질수록 문제가 될 수 있습니다.
필드 매핑 수(수동 또는 동적으로 생성된 것 모두)를 제한하고 문서가 매핑 폭증을 일으키지 않도록 하려면 매핑 제한 설정을 사용하세요.