ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 엘라스틱서치 업데이트 API [script]
    공부하기/엘라스틱서치 2024. 2. 26. 15:15
    • 스크립트를 통해 문서 내용를 변경할 수 있다.
    • defualt script : painless ( 엘라스틱 서치에서도 권장 )
      • 기본적으로 자바 문법과 유사하다.
    • 커스텀 플러그인을 통해 커스텀 스크립트도 사용할 수 있다.
    • script.source
      • ctx 변수를 통해 문서의 내용이나 메타데이터에 접근할 수 있다.
    • script 필드와 doc 필드를 함께 요청하면 doc은 무시된다.
    • 조회 API와 마찬가지로 routing과 refresh 옵션을 지정할 수 있다.
      • 동일한 routing 값으로 지정하여 업데이트해야 의도한 대로 동작한다.

     

    스크립트에서 접근할 수 있는 문맥

    • params :  요청한 params로 제공한 매개변수의 Map이다 ( 읽기전용 )
    • ctx._source : 저장된 문서의 _source를 Map 형태로 반환한다. ( 변경가능 )
    • ctx.op : 작업의 종류를 String으로 나타낸다.
      • 업데이트 요청의 ctx.op값은 기본적으로 "index"
      • "index", "none", "delete" 3가지의 값을 갖을 수 있다.
    • ctx._now : 현재 타임스탬프값을 밀리세컨드로 반환한다. ( 읽기전용 )
    • 문서의 메타 데이터에 접근할 수 있는 ctx 변수 ( 모두 읽기전용 )
      • ctx._index
      • ctx._id
      • ctx._type
      • ctx._routing
      • ctx._version

    키바나를 사용하여 script 업데이트를 요청하는 경우 """ ~~ """ 와 같이 쌍따옴표 3개로 묶어서 스크립트를 요청할 수 있다.

    단 이 기능은 키바나에 한정되어 직접 http 요청을 하는 경우에는 파싱 에러가 발생한다.

     

    문법

    POST 인덱스이름/_update/_id값
    {
    	"script": {
        	"source": "업데이트 스크립트"
            "lang": "사용할 스크립트", default: painless
            "params": {
            	~~, source에서 수행되는 스크립트에 필요한 params 
            }
        },
        ...
    }

     

    기본 실습

    업데이트 전 views
    스크립트 업데이트 요청 결과
    정상적으로 views 증가함을 확인

     

    필드 추가 실습

    스크립트를 통해 필드 추가
    정상적으로 추가된걸 확인

     

    필드 삭제 실습

    필드명을 스크립트를 통해 삭제 요청
    정상적으로 필드가 삭제된걸 확인

     

    upsert 실습

    존재하지 않는 _id값으로 upsert 실행
    정상적으로 문서 색인된 걸 확인
    똑같은 요청으로 실행시 script가 실행되는걸 확인
    script 정상작동 확인

     

     

    scripted_upsert 실습

    false일 때 404 에러

     

    • scripted_upsert : true
    • upsert: {}가 반드시 필요

    정상적으로 upsert가 진행된걸 확인

     

Designed by Tistory.