🛠️TOOL/🔭Elasticsearch

[Elasticsearch] - 인덱스 템플릿 사용하기

KangManJoo 2024. 4. 1. 15:04

인덱스 템플릿

인덱스 템플릿은 설정이 동일한 복수의 인덱스를 만들 때 사용한다.

인덱스를 파티셔닝하는 일이 많은데, 이 때 파티셔닝하는 인덱스들은 설정이 같아야 한다.

설정이 동일한 인덱스를 매번 일일이 작성하는 것은 매우 비효율적이다.

 

다음과 같이 템플릿 API를 사용해 현재 등록된 인덱스 템플릿을 본다.

GET _index_tamplae

와일드카드 표현식으로 다음과 같이 특정 인덱스 템플릿을 확인할 수도 있다.

GET _index_template/ilm*

 

인덱스 템플릿은 다양한 설정이 가능하지만 주로 매핑과 세팅 설정을 한다.

다음은 인덱스 템플릿을 생성하는 예시이다.

PUT _index_template/test_template
{
  "index_patterns": [
    "test_*"
  ],
  "priority": 1,
  "template": {
    "settings": {
      "number_of_shards": 3,
      "number_of_replicas": 1
    },
    "mappings": {
      "properties": {
        "name": {
          "type": "text"
        },
        "age": {
          "type": "short"
        },
        "gender": {
          "type": "keyword"
        }
      }
    }
  }
}

index_patterns는 새로 만들어지는 인덱스 중 인덱스 이름이 인덱스 패턴과 매칭될 경우 이 템플릿이 적용된다는 것을 의미한다.

priority는 인덱스 생성 시 이름에 매칭되는 템플릿이 둘 이상일 때 템플릿이 적용되는 우선순위를 정할 수 있다. 패턴과 priority가 중복되면 템플릿을 생성할 수 없다.

template은 새로 생성되는 인덱스에 적용되는 매핑,세팅 등의 설정을 정의한다.

 

다이나믹 템플릿

다이나믹 템플릿은 매핑을 다이나믹하게 지정하는 템플릿 기술이다. 매핑은 수정이 불가능하므로 신중하게 진행해야하지만, 로그 시스템이나 비정형화된 데이터를 인덱싱하는 경우를 생각해보면 로그 시스템의 구조를 모르기 때문에 필드 타입을 정확히 정의하기 힘들다.

 

다이나믹 템플릿은 이처럼 매핑을 정확하게 정할 수 없거나 대략적인 데이터 구조만 알고 있을 때 사용한다. 생성 방법은 인덱스를 만들 때 dynamic_templates를 추가하면 된다.

 

예시

PUT dynamic_index1
{
  "mappings": {
    "dynamic_templates": [
      {
        "my_string_fields": {
          "match_mapping_type": "string",
          "mapping": {
            "type": "keyword"
          }
        }
      }
    ]
  }
}

match_mapping_type 은 조건문이자 매핑 트리거다. 조건에 만족할 경우 트리거링이 되는데, 위 예시에서는 문자열 타입 데이터가 있으면 조건에 만족한다는 것이다. 매핑은 실제 매핑을 적용하는 부분인데, 해석하면 문자열(string) 타입의 데이터가 들어오면 키워드 타입으로 매핑해준다.

 

이밖에도 matchunmatch를 통해 필드의 이름에 조건을 걸거나 match_pattern으로 정규식 조건을 거는 등, 다양하게 활용할 수 있다.