반응형

 elasticsearch 설정 파일을 보면, destructive_requires_name이 있습니다. 이 필드에 대해서 간단하게 알아보도록 하겠습니다.

 


 

 먼저, myindex 인덱스를 추가해 보겠습니다. 그리고, GET 요청을 /_cat/indices로 보내보겠습니다. 그러면, myindex가 추가되었음을 알 수 있습니다.

 

그리고, myindex 안에 name이 "cho"인 데이터를 추가해 보겠습니다. 뭔가 명령어가 엄청 길어보이는데요. postman 같은 것을 설치하면 조금 더 간단하게 할 수 있습니다.

 

 

 name이 "ga"인 데이터를 myindex에 추가합니다.

 

 

 그리고 /myindex/_search를 하면, myindex에 있는 모든 데이터를 긁어 오겠다는 의미입니다.

 

 

 보시면, name이 "ga"인 데이터도 있음을 알 수 있습니다. 이제 아래 쿼리를 날려보겠습니다.

 

 

 -XDELETE /_all 이것은 모든 인덱스를 삭제합니다. indices를 조회해보면 모두 없음을 알 수 있습니다. 잠깐. 그런데, 이렇게 손쉽게 모든 데이터를 날려버리는 것은 위험해 보이지 않나요?

 


elasticsearch.yml을 보겠습니다.

 

 그러면, action.destructive_requires_name이 있습니다. 이것을 true로 바꿔 보겠습니다. 그리고 엘라스틱 서치 서비스를 다시 시작해 보겠습니다.

 

 

 myindex를 생성한 다음에, 똑같이 name이 "cho"인 데이터를 하나 추가해 보겠습니다. 그리고, 모든 인덱스를 제거해 보겠습니다.

 

 

  postman에서 그러한 처리를 하는 요청을 날려 보겠습니다.

 

 

  그러면, reason이 나오면서 에러가 나옵니다. 와일드 카드나, all indices는 허락되지 않는다고 합니다.

 

 

  그러면, 이렇게 명시하는 경우에는 어떨까요? DELETE file* 이것은 file이 서픽스인 인덱스를 모두 제거하겠다는 겁니다.

 

 

 정상적으로 실행되었다면, file을 서픽스로 가지는 것들이 모두 제거가 되었을 겁니다.

 

 

 그런데, 이 때도 에러가 발생함을 알 수 있습니다. 와일드 카드가 들어갔기 때문입니다. 이 경우, 직접 삭제해야 할 인덱스를 명시해야 합니다. -XDELETE /myindex를 날리보겠습니다. 그러면, myindex 인덱스에 있는 데이터들을 모두 제거합니다.

 

 

 true가 리턴됩니다. 삭제할 인덱스를 '명시'하게 하려면, destructive requires name을 true로 주어야 합니다. 제가 사용하고 있는 7.9.1 버전에서 이에 관한 내용은 공식 문서에 잘 나와 있는데요. <index> 단락에 나와 있습니다. 천천히 읽어보시고, 한 번 정도 실험해 보시면 좋겠습니다.

반응형

댓글을 달아 주세요

  1. Deborah

    오늘도 아주 중요한 내용을 올려 놓으셨네요. 늘 보고 배웁니다.