소행성이야기

Elasticsearch 문서 수정 및 조회를 해보도록 하겠습니다.

소행성왕자 2018. 9. 6. 16:06

Elasticsearch 문서 수정 및 조회를 해보도록 하겠습니다.


:문서 수정


문서를 인덱싱하거나 교체할 수 있는 것 처럼 수정도 가능합니다.

실제로는 Elasticsearch에서 기존의 내용을 수정하지는 않습니다.

만약 수정요청이 오면 Elasticsearch는 기존의 문서를 인덱스에서 삭제하고 신규 문서를 인덱싱하여 한번에 수정한 것 처럼 만듭니다.

아래 예제는 기존에 ID 1로 만든 문서의 name 항목을 Gil Dong로 변경하는지 보여줍니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
curl -XPOST -'Content-Type: application/json' 'localhost:9200/customer/external/1/_update?pretty&pretty' -d'
{
  "doc": { "name": " Gil Dong" }
}'
 
 
{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1,
  "_primary_term" : 2
}
cs




아래 예제는 기존의 ID 1로 만든 문서의 name 항목을 Kang Nam 으로 변경하면서 age 라는 항목을 추가하는 것 입니다.


1
2
3
4
curl -XPOST -'Content-Type: application/json' 'localhost:9200/customer/external/1/_update?pretty&pretty' -d'
{
  "doc": { "name": " Kang Nam", "age" : 20 }
}'
cs



또는 간단한 스크립트 방식으로 문서를 수정할 수 있습니다. 아래 예제는 기존의 age에 5를 더하는 것 입니다.


1
2
3
4
curl -XPOST -'Content-Type: application/json' 'localhost:9200/customer/external/1/_update?pretty&pretty' -d'
{
  "script" : "ctx._source.age += 5"
}'
cs



변경되었는지 확인해봐야겠죠?


1
2
3
4
5
6
7
8
9
10
11
12
curl -XGET 'localhost:9200/customer/external/1?pretty&pretty'  
{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 4,
  "found" : true,
  "_source" : {
    "name" : " Kang Nam",
    "age" : 25
  }
}
cs


이때, ctx._source 현재 수정될 문서를 가리키고 있습니다.




ID 가 2번의 문서를 추가해보겠습니다.


1
2
3
4
5
6
curl -XPUT -'Content-Type: application/json' http://localhost:9200/customer/external/2?pretty -'
{
  "name": "number 2"
}
'
curl -XGET 'localhost:9200/customer/external/2?pretty&pretty' 
cs

 



자 여기서 ID 2번 또 추가하면 어떻게 될까요 ?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
curl -XPUT -'Content-Type: application/json' http://localhost:9200/customer/external/2?pretty -'
{
  "name": "number 2  : 이미 있는2번인데"
}
'
 
curl -XGET 'localhost:9200/customer/external/2?pretty&pretty' 
 
{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "2",
  "_version" : 2,
  "found" : true,
  "_source" : {
    "name" : "number 2  : 이미 있는2번인데"
  }
}
cs


_source 의 문서가 업데이트 되었다는점을 위 내용으로 확인할수 있습니다.