2025.01.10 - [ElasticSearch] - ElasticSearch 클러스터 설정과 인덱스 설정 변경하기
이전 포스팅에서 살펴봤던 인덱스 설정은 API를 통해 변경했습니다.
만약 인덱스가 생성될 때마다 API를 통해 설정하려면 꽤나 번거롭습니다.
ElasticSearch는 이 번거로움을 해결하기 위해 template API를 제공하는데요, 기존 template API는 7.8 버전부터 deprecated 되었고, 대신 사용할 수 있는 component template과 index template이 있습니다.
사용 방법은 API를 이용해 템플릿을 등록하면 생성될 인덱스의 패턴에 따라 등록된 템플릿이 자동으로 적용됩니다.
Component Template
컴포넌트 템플릿은 인덱스의 settings, mappings, aliases, analyzer 등을 정의해 모듈화합니다.
인덱스 템플릿에서 여러 컴포넌트 템플릿을 조합해 사용되며, 직접 인덱스에 사용되지 않습니다.
PUT /_component_template/template_1
{
"template": {
"settings": {
"number_of_shards": 3
},
"mappings": {
"properties": {
"host_name": {
"type": "keyword"
},
"created_at": {
"type": "date"
}
}
}
}
}
- number_of_shards: 프라이머리 샤드의 개수를 지정합니다. 7.x 버전부터 기본 프라이머리 샤드 개수가 1개로 설정되기 때문에 필요한 개수만큼 설정합니다.
- mappings: 인덱스의 필드를 원하는 데이터 타입으로 매핑할 때 사용합니다.
- 위의 예시에선 `host_name` 필드는 `keyword` 타입으로, `created_at` 필드는 `date` 타입으로 매핑하도록 정의했습니다.
- 이 외에도 `aliases`를 지정할 수도 있습니다. 공식 문서를 참고하면 더 자세한 설정을 알 수 있습니다.
Index Template
인덱스 템플릿은 컴포넌트 템플릿을 조립한 템플릿이라고 생각할 수 있습니다.
인덱스 템플릿에서도 settings, mappings, aliases를 설정할 수 있으며, 각 부분에서 인덱스 설정, 매핑, 그리고 별칭을 정의합니다.
인덱스 템플릿에서 컴포넌트 템플릿을 조립해 사용해도, 인덱스 템플릿에 정의된 settings, mappings, aliases은 컴포넌트 템플릿의 내용을 덮어씌워 적용합니다.
PUT /_index_template/template_1
{
"index_patterns": ["test*", "bar*"],
"template": {
"settings": {
"number_of_shards": 3
},
"mappings": {
"properties": {
"host_name": {
"type": "keyword"
},
"created_at": {
"type": "date"
}
}
},
"aliases": {
"mydata": { }
}
},
"priority": 500,
"composed_of": ["component_template1", "runtime_component_template"],
"version": 3,
"_meta": {
"description": "my custom"
}
}
- `index_patterns`: "test*"을 사용해 test로 시작하는 인덱스들에 적용을 합니다.
- `priority`: 우선순위를 지정할 수 있습니다. 이 값이 높을수록 우선순위가 높습니다.
- `compose_of`: 기존에 등록한 컴포넌트 템플릿을 병합해서 적용합니다. 컴포넌트 템플릿을 여러 개를 나열했을 때 나중에 위치한 템플릿이 이전 템플릿을 덮어씁니다. 또한 컴포넌트 템플릿에 정의된 필드 매핑보다 인덱스 템플릿에 정의한 필드 매핑이 우선적으로 적용됩니다.
예시에서는 두 개의 컴포넌트 템플릿을 조합해 적용했는데, `runtime_component_template` 템플릿과`component_template1` 템플릿에 동일한 필드 매핑이 정의되어 있다면 `runtime_component_template` 템플릿이 적용됩니다.