필드를 업데이트해야하는 경우가 있는데 업데이트 하는 방법엔 여러가지가 있다.
첫번째로 POST를 아예 전체 다시 쓰는 경우다.
이게 뭔말이냐 하면 POST로 처음에 인덱스에 값을 등록하는 것처럼 똑같은 데이터를 즉 아이디가 같은 데이터를 똑같이 POST로 입력해주면 업데이트가 된다. 처음에 데이터 등록할때처럼 해도 된다는 거다.
두번째로 _UPDATE문을 이용하는거다. 이 경우는 전체가 아니라 일부만 컬럼만 수정이 가능하다.
POST test/_update/test_1826
{
"doc": {
"point": 6
}
}
이렇게 /index명/_update/아이디 를 써주고 원하는 필드에 값을 넣어주면 전체가 아닌 일부 컬럼만 업데이트가 된다.
이번엔 update문에 script를 사용해보자.
POST test/_update/test_1826
{
"script": {
"source": "ctx._source.point = params.point",
"lang": "painless",
"params": {
"point": 100
}
}
}
script부분을 설명하면
우선 엘라스틱서치는 "painless"라는 script언어를 사용한다.
"source"에 있는 거는 point라는 필드 값을 params라는 json데이터 안에 있는 point값을 가져와서 넣겠다는 뜻이다.
그래서 point가 100이된다.
위의 쿼리는 아래와 같이 쓸 수 있다.
POST test/_update/test_1826
{
"script" : "ctx._source.point = 200"
}
이렇게 하면 point가 200이 된다. 이렇게 직접 넣을 수도 있다.
스크립트를 이용하면 if문을 쓸 수도 있다.
POST test/_update/test_1826
{
"script": {
"source": "if (ctx._source.name.equals('test')) { ctx._source.point = 1000 }"
}
}
name이 test인 놈을 찾아서 point에 1000을 입력할 수 있다.
세번째는 _update_by_query 다
POST cboard/_update_by_query
{
"script": {
"source": "ctx._source.name = 'elas'",
"lang": "painless"
},
"query": {
"match" : {
"point" : 1000
}
}
}
point가 1000인 게시물의 name을 elas로 업데이트했다.
'엘라스틱서치' 카테고리의 다른 글
엘라스틱서치, 필드의 타입을 변경할때는 그냥 reindex 해서 인덱스를 다시 만들자 (0) | 2023.09.05 |
---|---|
엘라스틱서치 - 와일드카드 검색, like 검색 (0) | 2023.08.31 |
엘라스틱서치에서 날짜별로 group by 하기 - aggs (0) | 2023.07.27 |
엘라스틱서치에서 group by 사용하기 - aggs (0) | 2023.07.25 |
Logstash의 활용 - 새롭게 등록되거나 수정된 데이터만 등록 (0) | 2023.07.03 |