: 인덱스를 생성할 때 샤드 수, 리플리카 수, 리프레시 주기 등 저장소와 성능 관련 설정을 조정
| 옵션 | 설명 |
|---|---|
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"] } } } } }
: 문서의 구조를 정의. 각 필드의 타입을 지정하고, 검색/집계 방법을 설정
text vs keyword (문자열 타입)| 타입 | 설명 | 주요 용도 |
|---|---|---|
text | 분석기(analyzer)를 거쳐 역인덱싱됨 | 검색 전용 |
keyword | 분석 없이 전체 문자열을 하나의 토큰으로 저장 | 정렬, 필터, 집계 |
"title": { "type": "text", "analyzer": "standard" }, "category": { "type": "keyword" }
long, float, scaled_float, 등)| 타입 | 설명 |
|---|---|
integer / long / short | 정수형 타입 |
float / double | 실수형 |
scaled_float | 정밀한 실수 표현 시 사용 (e.g. 가격) |
"price": { "type": "scaled_float", "scaling_factor": 100 }
date)yyyy-MM-dd'T'HH:mm:ssZ||로 조합 가능"created_at": { "type": "date", "format": "yyyy-MM-dd||epoch_millis" }
boolean)true, false, 또는 "true", "false" 등의 문자열도 인식됨null_value 옵션으로 기본값 지정 가능"is_deleted": { "type": "boolean", "null_value": false }
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" } } }
geo_point, geo_shape)geo_distance, geo_bounding_box"location": { "type": "geo_point" }
IP
"ip_addr": { "type": "ip" }
Range
"price_range": { "type": "double_range" }
Binary
: 파일을 base64로 인코딩해서 저장 가능 (검색 불가능)
"file": { "type": "binary" }
: 하나의 필드를 여러 용도로 사용할 때 사용
"name": { "type": "text", "fields": { "keyword": { "type": "keyword" } } }→
"name"으로는 검색 가능,"name.keyword"로는 정렬·집계 가능