기본적으로 Mapping을 update, create 를 하려면 기존 Mapping에
아래 내용처럼 추가를 해주면 되지만
PUT /my-index-000001/_mapping
{
"properties": {
"email": {
"type": "keyword"
}
}
}
관리하기 쉽게 template으로 Mapping 한 경우 기존 template Mapping 추가하여 덮어쓰는 형식으로 한다.
PUT _template/template_1
{
"index_patterns": ["te*", "bar*"],
"settings": {
"number_of_shards": 1
},
"mappings": {
"_source": {
"enabled": false
},
"dynamic" : "strict", // Dynamic Mapping 기능 해제
"properties": {
"host_name": {
"type": "keyword"
},
"created_at": {
"type": "date",
"format": "EEE MMM dd HH:mm:ss Z yyyy"
}
}
}
}
해당 template Mapping 헷갈린 부분은 " dynamic:strict " 이다.
기본적으로 Elasticsearch은 Mapping 선언해주지 않더라도
type:keyword로 잡아주며 자동적으로 추가되지만,
해당 문구를 선언하면 동적으로 잡아주는 Mapping 기능 해제한다.
Aliases
Mapping후 alias를 선언해주거나, Mapping동시에 선언이 가능하다.
POST /_aliases
{
"action":[
{
"remove/add":{
"index":"template_1"
"alias":"template"
}
}
]
}
nested
properties 원하는 필드에 선언을 해준다.
PUT _template/template_1
{
"index_patterns": ["te*", "bar*"],
"settings": {
"number_of_shards": 1
},
"mappings": {
"_source": {
"enabled": false
},
"dynamic" : "strict", // Dynamic Mapping 기능 해제
"properties": {
"host_name": {
"type": "keyword"
},
"created_at": {
"type": "date",
"format": "EEE MMM dd HH:mm:ss Z yyyy"
},
"file":{
"type":"nested",
"field_name":{
-- 그 외 같음 --
}
}
}
}
}
request query
{
"nested":{
"path":"nested field_name"
"query":{
그 외 같음
}
}
}