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