ETL/Elasticsearch
[Elasticsearch] 실무에서 자주 사용하는 쿼리(업데이트)
PONI
2023. 10. 17. 10:57
반응형
1. doc 업데이트
수정하고자 하는 doc을 지정하여 업데이트
doc의 특정 필드를 지정하여 업데이트 가능
1) 일반 필드
post emp/_update/1234
{
"doc": {
"ath_cd": [
"R01",
"R02"
],
"ath_nm": "관리자,직원"
}
}
2) nested 필드
post emp/_update/1234
{
"doc": {
"nested_regi": [
{
"regi_yn": "Y",
"regi_pooltypeid": "P02"
}
]
}
}
2. 조건대상 업데이트
- script 절에서 변경 대상, 변경전 값, 변경후 값 입력
get emp/_search
{
"script": {
"source": "for (int i = 0; i < ctx._source.nested_regi.size(); i++) { if (ctx._source.nested_regi[i].date_end_dt == '20231020') { ctx._source.nested_regi[i].date_end_dt == '20231031' } }"
},
"query": {
"bool": {
"must": [
{
"match": {
"dvsn_cd": "123456"
},
{
"nested": {
"path": "nested_regi",
"query": {
"bool": {
"must": [
{
"match": {
"nested_regi.regi_yn": "Y"
}
},
{
"terms": {
"nested_regi.regi_pooltypeid": [
"P01",
"P02"
]
}
}
],
"must_not": [
{
"match": {
"nested_regi.date_str_dt": "99991231"
}
}
]
}
}
}
}
]
}
}
}
3. 다중조건 업데이트
post emp/_update_by_query
{
"script" {
"source": "for (item in ctx._source.nested_regi) {if (item.regi_yn == params.old_value && item.date_str_dt == params.target_value) {item.regi_yn = params.new_value}}",
"params": {
"old_value": "N",
"new_value": "Y",
"target_value": "20231031"
}
},
"query": {
"bool": {
"must": [
{
"match": {
"emp_no": "1234"
}
},
{
"nested": {
"path": "nested_regi",
"query": {
"bool": {
"must": [
{
"match": {
"nested_regi.regi_yn": "N"
}
},
{
"terms": {
"nested_regi.regi_pooltypeid": [
"P01",
"P02"
]
}
}
]
}
}
}
]
}
}
}
<개선사항은 언제든지 댓글로 부탁드립니다!>
반응형