[Elasticsearch] 인덱스 설정과 매핑

임유진·2025년 7월 21일

클라우드/인프라

목록 보기
8/25
post-thumbnail

1. Index Settings (인덱스 설정)

: 인덱스를 생성할 때 샤드 수, 리플리카 수, 리프레시 주기 등 저장소와 성능 관련 설정을 조정

주요 옵션

옵션설명
number_of_shards인덱스의 기본 샤드 수 (기본 1개)
number_of_replicas리플리카 수. 하나의 프라이머리에 대응하는 복제본 개수
refresh_interval문서가 색인된 후 검색 가능해지는 주기. 기본 "1s"
analysis커스텀 analyzer, tokenizer 등을 정의하는 공간
PUT /my_index
{
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 1,
    "refresh_interval": "10s",
    "analysis": {
      "analyzer": {
        "my_lowercase_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": ["lowercase"]
        }
      }
    }
  }
}

2. Mappings (매핑)

: 문서의 구조를 정의. 각 필드의 타입을 지정하고, 검색/집계 방법을 설정

2.1 text vs keyword (문자열 타입)

타입설명주요 용도
text분석기(analyzer)를 거쳐 역인덱싱됨검색 전용
keyword분석 없이 전체 문자열을 하나의 토큰으로 저장정렬, 필터, 집계
"title": { "type": "text", "analyzer": "standard" },
"category": { "type": "keyword" }

2.2 숫자 타입 (long, float, scaled_float, 등)

타입설명
integer / long / short정수형 타입
float / double실수형
scaled_float정밀한 실수 표현 시 사용 (e.g. 가격)
"price": {
  "type": "scaled_float",
  "scaling_factor": 100
}

2.3 날짜 타입 (date)

  • 기본 포맷: yyyy-MM-dd'T'HH:mm:ssZ
  • 다양한 포맷을 ||로 조합 가능
"created_at": {
  "type": "date",
  "format": "yyyy-MM-dd||epoch_millis"
}

2.4 불리언 타입 (boolean)

  • true, false, 또는 "true", "false" 등의 문자열도 인식됨
  • null_value 옵션으로 기본값 지정 가능
"is_deleted": {
  "type": "boolean",
  "null_value": false
}

2.5 object vs nested

타입설명쿼리 방식
object일반 JSON 객체단일 레벨 검색
nested내부 조인이 필요한 객체 배열nested query 필요
"user": {
  "type": "object",
  "properties": {
    "name": { "type": "text" },
    "age": { "type": "integer" }
  }
},
"comments": {
  "type": "nested",
  "properties": {
    "author": { "type": "keyword" },
    "text": { "type": "text" }
  }
}

2.6 Geo 데이터 (geo_point, geo_shape)

  • 지원 쿼리 예: geo_distance, geo_bounding_box
"location": {
  "type": "geo_point"
}

2.7 IP, Range, Binary

  • IP

    "ip_addr": {
      "type": "ip"
    }
  • Range

    "price_range": {
      "type": "double_range"
    }
  • Binary
    : 파일을 base64로 인코딩해서 저장 가능 (검색 불가능)

    "file": {
      "type": "binary"
    }

3. Multi-fields

: 하나의 필드를 여러 용도로 사용할 때 사용

"name": {
  "type": "text",
  "fields": {
    "keyword": {
      "type": "keyword"
    }
  }
}

"name"으로는 검색 가능, "name.keyword"로는 정렬·집계 가능


참고

profile
말하는 고구마

0개의 댓글