명시적 매핑

원본 보기

명시적 매핑

데이터에 대해서는 Elasticsearch가 추측하는 것보다 사용자가 더 잘 알고 있습니다. 따라서 동적 매핑은 처음 시작할 때 유용하지만, 어느 시점이 되면 직접 명시적 매핑을 지정하고 싶어질 것입니다.

필드 매핑은 인덱스를 생성할 때기존 인덱스에 필드를 추가할 때 만들 수 있습니다.

create index API를 사용해 명시적 매핑을 가진 새 인덱스를 생성할 수 있습니다.

				PUT /my-index-000001
					{
  "mappings": {
    "properties": {
      "age":    { "type": "integer" },
      "email":  { "type": "keyword"  },
      "name":   { "type": "text"  }
    }
  }
}
		
  1. integer 필드인 age를 생성합니다
  2. keyword 필드인 email을 생성합니다
  3. text 필드인 name을 생성합니다

update mapping API를 사용해 기존 인덱스에 하나 이상의 새 필드를 추가할 수 있습니다.

다음 예시는 index 매핑 파라미터 값이 falsekeyword 필드 employee-id를 추가합니다. 즉, employee-id 필드의 값은 저장되지만 색인되지 않으며 검색에도 사용할 수 없습니다.

				PUT /my-index-000001/_mapping
					{
  "properties": {
    "employee-id": {
      "type": "keyword",
      "index": false
    }
  }
}
		

지원되는 매핑 파라미터를 제외하면, 기존 필드의 매핑이나 필드 타입은 변경할 수 없습니다. 기존 필드를 변경하면 이미 색인된 데이터가 무효화될 수 있습니다.

데이터 스트림의 백업 인덱스에서 필드 매핑을 변경해야 한다면 데이터 스트림의 매핑 및 설정 변경을 참고하세요.

다른 인덱스에서 필드 매핑을 변경해야 한다면, 올바른 매핑을 가진 새 인덱스를 생성하고 데이터를 해당 인덱스로 reindex하세요.

필드 이름을 변경하면 이전 필드 이름으로 이미 색인된 데이터가 무효화됩니다. 대신 alias 필드를 추가해 대체 필드 이름을 만드세요.

get mapping API를 사용해 기존 인덱스의 매핑을 확인할 수 있습니다.

				GET /my-index-000001/_mapping
		

이 API는 다음과 같은 응답을 반환합니다:

{
  "my-index-000001" : {
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "integer"
        },
        "email" : {
          "type" : "keyword"
        },
        "employee-id" : {
          "type" : "keyword",
          "index" : false
        },
        "name" : {
          "type" : "text"
        }
      }
    }
  }
}
		

하나 이상의 특정 필드에 대한 매핑만 확인하려면 get field mapping API를 사용할 수 있습니다.

인덱스의 전체 매핑이 필요하지 않거나 인덱스에 필드가 많은 경우에 유용합니다.

다음 요청은 employee-id 필드의 매핑을 가져옵니다.

				GET /my-index-000001/_mapping/field/employee-id
		

이 API는 다음과 같은 응답을 반환합니다:

{
  "my-index-000001" : {
    "mappings" : {
      "employee-id" : {
        "full_name" : "employee-id",
        "mapping" : {
          "employee-id" : {
            "type" : "keyword",
            "index" : false
          }
        }
      }
    }
  }
}