Programming/ElasticSearch

script 와 doc 차이

dev? 2024. 11. 20. 16:43
반응형

1. doc

  • 기능: 특정 필드의 값을 지정된 값으로 대체합니다.
  • 용도: 문서에서 일부 필드를 수정하거나 추가할 때 사용합니다.
  • 작동 방식:
    • 요청에 지정된 필드만 변경됩니다.
    • 지정되지 않은 필드는 유지됩니다.
    • doc은 간단한 값을 업데이트할 때 적합합니다.
POST /my_index/_update/15
{
  "doc": {
    "author" : "John Doe"
  },
  "upsert": {
    "title" : "Elasticsearch Basics",
    "author" : "Jane Doe",
    "publish_date" : "2024-05-09",
    "tags" : ["search", "analytics"]
  }
}

 

  • 기존 문서에서 author 필드만 "John Doe"로 수정됩니다.
  • 기존 데이터에서 다른 필드는 변경되지 않습니다.

 

2. script

  • 기능: 특정 필드를 계산적으로 업데이트하거나, 복잡한 로직을 수행할 수 있습니다.
  • 용도: 값의 계산, 조건부 업데이트, 동적 필드 추가 등에 사용합니다.
  • 작동 방식:
    • script는 Java-like 스크립트 언어인 Painless를 사용하여 로직을 정의합니다.
    • 기존 값을 기준으로 동적 변경이 가능합니다.
POST /my_index/_update/16
{
  "script": {
    "source": "ctx._source.price++"
  },
  "upsert": {
    "title" : "Elasticsearch Basics",
    "author" : "Jane Doe",
    "publish_date" : "2024-05-09",
    "price" : 100,
    "tags" : ["search", "analytics"]
  }
}

 

 

  • price 필드가 이미 존재한다면, 해당 값을 1 증가시킵니다.
  • price 필드가 없거나 문서가 존재하지 않는다면, upsert 데이터가 삽입됩니다.

 

3. 주요 차이점

특징 doc script
동작 방식 지정된 값으로 필드를 대체 기존 데이터를 기반으로 계산하거나 조건부 업데이트 수행
용도 단순 필드 업데이트, 추가 계산, 조건부 업데이트, 복잡한 로직
유연성 제한적 (고정된 값만 지정 가능) 매우 유연함 (스크립트를 통해 복잡한 연산 가능)
성능 비교적 빠름 스크립트 실행 비용이 있어 조금 더 느릴 수 있음
예시 "author": "John Doe"처럼 값 대체 "price++", 조건부 업데이트 등 동적 작업 

 

 

4. 주의사항 

  1. doc 
    • 단순한 업데이트에 적합하며, 데이터를 덮어씌우므로 잘못된 값으로 대체되지 않도록 주의해야 합니다.
  2. script
    • 계산 로직이 복잡하거나 자주 실행되는 경우 성능에 영향을 줄 수 있습니다.
    • script 사용 시 보안 문제(예: 악성 스크립트)나 리소스 소비를 고려해야 합니다.

 


정리

단순 업데이트는 doc,

동적/계산적 업데이트는 script를 사용

반응형