전체 그래프
Elasticsearch

Mapping & Fields

data-engineeringelasticsearchmappingfield-type

상위: Elasticsearch

요약

매핑(Mapping)은 문서의 필드와 데이터 타입을 정의하는 것으로, RDB의 스키마와 유사합니다.

Mapping 종류

Dynamic Mapping

  • 데이터 입력 시 자동으로 필드 타입을 추론하여 매핑을 생성합니다.
  • 장점: 편리함.
  • 단점: 잘못된 타입으로 매핑될 수 있음 (예: 날짜가 문자열로).

Dynamic Parameter

es.indices.create(index="products", body={"mappings": {"dynamic": "runtime"}})
설정값동작
true새로운 필드 자동 추가 (기본값)
runtime색인하지 않고 쿼리 시 로드
false새로운 필드 무시
strict필드 추가 시 오류 발생

Static Mapping

  • 사용자가 미리 필드 타입을 명시적으로 정의합니다.
  • 장점: 정확한 데이터 모델링, 검색 성능 최적화, 저장 공간 절약.
  • 한 번 설정되면 일부 변경 제한
{
  "mappings": {
    "properties": {
      "name": {"type": "text"},
      "brand": {"type": "keyword"},
      "price": {"type": "float"},
      "category": {"type": "keyword"},
      "rating": {"type": "float"}
    }
  }
}

주요 Field Types

문자열 (String)

text

  • 전문 검색(Full-text Search)용
  • Analyzer에 의해 토큰화
  • 부분 검색 가능, 문서 간 유사도 검색에 적합 (BM25)

변형 타입:

  • match_only_text: 점수 매기지 않음, 로그 분석용
  • search_as_you_type: 자동완성 검색 지원

keyword

  • 정확한 값 일치(Exact Match), 정렬, 집계용
  • 분석되지 않고 원문 그대로 저장
  • 적합 용도: 브랜드명, ID, 태그, 카테고리

변형 타입:

  • constant_keyword: 고정된 단일 값, 수정 불가
  • wildcard: 부분 일치/패턴 검색용 (*, ? 사용)

기타

  • Numeric: long, integer, short, byte, double, float
  • Date: 날짜 및 시간
  • Boolean: true, false
  • Object & Nested: 계층 구조 데이터. nested는 배열 내 객체의 독립성 보장
  • Geo: geo_point, geo_shape

Index 관련 개념

Forward Index vs Inverted Index

Forward Index (정방향)

  • 문서 기준 인덱싱, 문서 내용 파악에 유리
문서 1  ["Elasticsearch", "검색", "엔진"]

Inverted Index (역방향)

  • Elasticsearch 기본 방식, 빠른 검색 가능
"검색"  [문서 1]

field data vs doc_value

속성field datadoc_value
저장 위치메모리디스크
용도text 필드 정렬/집계keyword 필드 기본
단점메모리 사용량 증가-

Index Alias

인덱스에 가상의 이름을 부여하여 여러 인덱스를 하나처럼 사용하거나, 무중단 교체가 가능합니다.

PUT /products
{
  "aliases": {
    "products_alias": {}
  }
}

무중단 인덱스 변경

POST /_aliases
{
  "actions": [
    { "remove": { "index": "products", "alias": "products_alias" }},
    { "add": { "index": "products_v2", "alias": "products_alias" }}
  ]
}