728x90
특정 쿼리에 해당하는 데이터들을 한번에 update 하는 쿼리
index_name/_update_by_query [POST]
{
"script":{
"source":"ctx._source.USER_LOCATION = params.location",
"params":{
"location":"경기도"
}
},
"query":{
"term":{
"USER_LOCATION":"서울특별시"
}
}
}
index_name에 있는 document 들 중에 USER_LOCATION 값이 서울특별시 인 데이터들을 경기도로 변경
주의할점!!!
update 시킬 데이터가 지나치게 많을 경우 처리하는 개수를 정할 수 있는지 모르겠는데
일정량씩 처리를 해서 오래 걸릴 수 있으니 생각하고 사용해야함
전에 데이터 몇만개 짜리를 _update_by_query를 cerebro에서 날렸는데 cerebro가 먹통이 되면서 엘라스틱서치도 멈춘건가 했는데
일정량씩 처리되고 있었음..
여러개 쓸 때는 ,(콤마)가 아닌 ;(세미콜론으로 구분지어야함)
index_name/_update_by_query [POST]
{
"script":{
"source":"ctx._source.USER_LOCATION = params.location;ctx._source.ETC = params.etc",
"params":{
"location":"경기도",
"etc": "test"
}
},
"query":{
"term":{
"USER_LOCATION":"서울특별시"
}
}
}
이런식으로 할 수도 있고
또 추가적으로 params가 아닌 방법으로는 다음과 같은 방법이 있음
index_name/_update_by_query [POST]
{
"script":{
"source":"ctx._source.USER_LOCATION = '경기도'"
},
"query":{
"term":{
"USER_LOCATION":"서울특별시"
}
}
}
문자열은 '를 이용해 감싸주면 되고
정수는 '없이 숫자를 입력하면됨
그리고 가능하면 그냥 바로 _update_by_query를 날리지말고 먼저 쿼리로 바꾸고자 하는 데이터가 맞는지 검색을 한뒤 하는게 좋다.
바로 위 소스로 예시를 든다면
index_name/_search [GET]
{
"query":{
"term":{
"USER_LOCATION":"서울특별시"
}
}
}
이렇게 먼저 바꾸려는 데이터가 출력이 되는지 확인을 한 후 맞다면
index_name/_update_by_query [POST]
{
"script":{
"source":"ctx._source.USER_LOCATION = '경기도'"
},
"query":{
"term":{
"USER_LOCATION":"서울특별시"
}
}
}
이렇게 하면 된다.
반응형
'ElasticSearch' 카테고리의 다른 글
[ElasticSearch] windows에 elasticsearch 설치 (0) | 2020.01.03 |
---|---|
[ElasticSearch] 특정 필드 글자 길이 조건 (0) | 2019.11.05 |
[ElasticSearch] op_type option (0) | 2019.06.07 |
[ElasticSearch] _update로 데이터 update (0) | 2019.06.07 |
[ElasticSearch] aggs top_hits (aggregation 중복제거 개념?) (1) | 2019.06.05 |