본문 바로가기
elasticsearch

_update_by_query (부분 업데이트)

by bryan.oh 2023. 8. 7.
반응형

_update_by_query

아래와 같은 document 가 있을 때,

{
    "user_name": "hello-bryan",
    "site_url": "https://hello-bryan.tistory.com",
    "language": "python"
}

language 필드의 값만 바꾸고 싶다면

POST your_index/_update_by_query?conflicts=proceed
{
  "script":{
    "source": "ctx._source.language = 'java'"
  },
  "query": {
    "query_string": {
      "query": "_id: 123456"
    }
  }
}

query 필드로 documents 를 검색해서 검색된 결과를 모두 업데이트 합니다.

 

위는 간단한 값을 변경하는 예제이고

params 를 사용하면 여러가지 타입의 값을 변경하기 수월합니다.

POST your_index/_update_by_query?conflicts=proceed
{
  "script":{
    "source": "ctx._source.field_name = params.new_value",
    "lang": "painless",
    "params": {
      "new_value": "hello-bryan.tistory.com"
    }
  },
  "query": {
    "query_string": {
      "query": "some_field: some_filter"
    }
  }
}

 

  1. conflicts: 업데이트 중 충돌을 처리
    • abort: 기본값. 업데이트 중단
    • proceed: 계속 진행
  2. script: 스크립트를 정의
    • source: 스크립트 내용
    • lang: 기본 painless
    • params: 스크립트에서 사용할 매개 변수
  3. refresh
    • true: 기본값. 업데이트 즉시 갱신
    • false
  4. requests_per_second: 초당 요청 제한을 설정
  5. slices: 병렬로 실행되는 작업 수를 정의
  6. timeout: 최대 실행 시간
728x90
반응형

댓글