인프런 커뮤니티 질문&답변

박제원님의 프로필 이미지
박제원

작성한 질문수

실리콘밸리 엔지니어와 함께하는 Elasticsearch

Mapping을 업데이트하는 방법(ft. Reindexing)

롤오버된 인덱스의 경우 리인덱싱을 어떻게 하면 되나요?

해결된 질문

작성

·

49

0

안녕하세요 궁금한게 있어서 질문 남깁니다.

기존 인덱스 맵핑을 업데이트 하는 방법의 경우 새로 인덱스를 생성하고 리인덱싱 api 를 이용하여 데이터를 옮기고 색인을 새로 하는 걸로 강의를 보고 학습했습니다.

그렇다면 실무환경에서 롤오버되어있는 인덱스의 경우 어떻게 처리를 하면 좋을지 질문 남깁니다.

롤오버 될 경우

rollover-test-000001
rollover-test-000002
rollover-test-000003

...

이런식으로 인덱스가 생성이 되어있을텐데
전부 새로 생성하고 리인덱싱 해줘야 하는 부분일까요

아니면 실무에서는 다른 방법을 사용하는걸까요

답변 1

1

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

안녕하세요 박제원님,

 

롤오버 인덱스를 사용할 때의 맵핑 업데이트 방법은 일반적인 인덱스와는 조금 다릅니다. 롤오버 인덱스 구조에서는 매번 새 인덱스가 생성되기 때문에, 맵핑 변경 시 모든 기존 인덱스를 다 리인덱싱하는 것은 비효율적입니다.

 

실무에서 롤오버 인덱스의 맵핑을 업데이트하는 방법은 보통 다음과 같은 단계로 진행됩니다

 

1. 신규 인덱스 템플릿 업데이트

롤오버 인덱스를 생성할 때는 보통 인덱스 템플릿을 사용하여 인덱스의 맵핑 및 설정을 자동으로 적용하게 합니다. 그래서 새로운 맵핑이 필요하다면, 먼저 인덱스 템플릿을 업데이트합니다. 이렇게 하면 다음 롤오버 시 새로 생성되는 인덱스부터는 업데이트된 맵핑이 적용됩니다.

 

2. 새로운 맵핑을 적용한 롤오버 수행

인덱스 템플릿을 업데이트한 후에 기존 인덱스에 대해서는 롤오버를 통해 새로운 인덱스를 생성합니다. 이 새로운 인덱스에는 업데이트된 맵핑이 적용됩니다.

 

3. 기존 인덱스의 데이터 처리

기존에 생성된 롤오버 인덱스들에 대해서도 업데이트된 맵핑이 적용되어야 한다면, 리인덱싱이 필요합니다. 하지만 롤오버 구조에서는 이전 데이터는 종종 변경되지 않거나, 읽기 전용으로 사용되므로 꼭 모든 인덱스를 리인덱싱할 필요는 없습니다. 새로 추가된 맵핑 필드가 필요한 경우나 변경된 필드에 대한 접근이 필요할 때만 리인덱싱을 고려하면 됩니다.

 

실무 팁

  1. 필드가 점진적으로 추가되는 경우: 기존의 모든 롤오버 인덱스에 대한 리인덱싱 없이도 새로운 인덱스에만 적용할 수 있습니다.

  2. 읽기 전용 인덱스 관리: 오래된 인덱스는 읽기 전용으로 설정하고 변경이 필요한 경우 최소한의 리인덱싱을 수행해 비용과 리소스를 절약할 수 있습니다.

  3. 데이터 수명 주기 관리: ILM(인덱스 수명 주기 관리)을 사용하여 특정 시간 이후에 오래된 인덱스를 아카이브하거나 삭제하는 전략을 사용할 수 있습니다.

 

흐음... 쉽게 말하자면, 롤오버 인덱스에서 맵핑 업데이트가 필요한 경우 새로운 템플릿을 설정하고, 이후 새롭게 롤오버되는 인덱스에 새로운 맵핑을 적용하는 방식이 실무에서 흔히 사용됩니다. 꼭 필요한 경우에만 기존 인덱스에 대해 리인덱싱을 고려하는 것이 좋습니다.

박제원님의 프로필 이미지
박제원
질문자

웬만하면 기존 롤오버된 인덱스의 경우 그대로 두고 새로 생성되는 인덱스부터 적용하는게 낫다는 의견이시군요. 상세한 답변 감사합니다.

박제원님의 프로필 이미지
박제원

작성한 질문수

질문하기