본문 바로가기

elasticsearch

[elasticsearch] 특정 조건에 해당하는 document들 일괄 업데이트(update_by_query)

반응형

 

 

elaticsearch에서 특정 조건에 해당하는 document들을 모두 업데이트하고 싶다면 update_by_query를 사용하면 된다. 예제를 통해서 어떻게 하는지 알아보자.

 

아래 명령어는 Kibana DevTools를 기준으로 작성했다. 

 

1) 먼저 특정 조건에 해당하는 document들 확인

# document field 등 disk 사이즈가 0보다 작은 document들이 있는지 먼저 탐색해본다.

GET test-resource/_search
{
  "query": {
        "range" : {
            "disk" : {
                "lt" : 0
            }
        }
    }
}

먼저 _search API를 통해서 disk가 0보다 작은 아이들을 찾는다. 

disk값이 0보다 작을 수는 없으므로 잘못된 정보다.

이를 일괄 0으로 수정해보자.

 

 

2) update_by_query를 통해 일괄 업데이트

POST test-resource/_update_by_query
{
    "script": {
        "source": "ctx._source.disk = 0",
        "lang": "painless"
    },
    "query": {
        "range" : {
            "disk" : {
                "lt" : 0
            }
        }
    }
}

script 안에서 painless 명령어를 통해 disk필드 값을 0으로 변경한다.

즉 disk값이 0 미만인 document들을 모두 0 값으로 맞춘다.

 

 

update_by_query를 하면 특정조건에 맞는 document들을 일괄적으로  수정할때 유용하다.

반응형