(ElasticSearch) 데이터 처리

* 삽입


curl -XPUT "http://localhost:9200/books/book/1" -H 'Content-Type:application/json' -d
' {
    "title" : "ElasticSearch Guide"
   ~~~
} '



해당 데이터만 보고 싶은 경우는 뒤에 _source를 붙인다.

* 조회

curl -XGET http://localhost:9200/books/book/1/_source

_source를 붙이지 않은 경우는 

메타 정보도 함께 표시된다.



* 삭제

curl -XDELETE "http://localhost:9200/books/book/1"

이때는 도큐먼트 데이터를 삭제한 것으로 도큐먼트의 메타정보는 여전히 남아있다.
이후 해당 도큐먼트에 다시 데이터를 업데이트 하면 _version 이 증가 하는 것을 볼 수 있다.

그러나 모든 도큐먼트를 일괄 삭제하면

curl -XDELETE "http://localhost:9200/books/book"
메타 정보도 삭제되는 것을 볼 수 있다.



*데이터 업데이트(_update) API


도큐먼트 데이터 업데이트 API는 두 개의 매개변수인 doc와 script를 이용해서 데이터를 제어할 수 있다.
doc매개변수는 도큐먼트에 새로운 필드를 추가하거나 기존 필드 값을 변경하는 데 사용한다.
script매개변수는 좀 더 복잡한 프로그래밍 기법을 사용해서 입력된 내용에 따라 필드의 값을 변경하는 등의 처리에 사용한다.

curl -XPOST http://host:port/{인덱스}/{타입}/{도큐먼트 id}/_update -d '{업데이트 명령어}'


예를들어, 기존의 값에 "Category"필드를 추가하겠다.


curl -XPOST "http://localhost:9200/books/book/1/_update" -H "Content-Type:application/json"
-d 

' { 
    "doc" :  {
        "Category" : "ICT"
             }
}'


_update API 는 도큐먼트의 구조를 변경하는 것이 아니라 실제로는 GET메소들르 저장된 도큐먼트의 값을 가져와서 입력한 명령을 토대로 새로 변경된 도큐먼트 내용을 만들고 다시 그 내용을 기존 도큐먼트에 입력하는 방식으로 동작한다.




curl -XPOST "http://localhost:9200/books/book/1/_update" -H "Content-Type:application/json" -d '
> {
>  "script" : "ctx._source.page += 50"
> }'


기존 페이지 필드에 50을 더하게 된다.


결과 :
{
  "_index" : "books",
  "_type" : "book",
  "_id" : "1",
  "_version" : 3,
  "found" : true,
  "_source" : {
    "title" : "ElasticSearch Guide",
    "author" : "kim",
    "date" : "2017-12-17",
    "page" : 350,
    "Category" : "ICT"
  }
}


기존 필드인 "author" 필드에 "Lee"를 추가해보자

일단 기존 필드 "author"의 값을 배열로 만들어야 한다.


curl -XPOST "http://localhost:9200/books/book/1/_update" -H "Content-Type:application/json" -d '
> {
>  "doc" : {
>    "author" : ["kim"]
> }
> }'


그 후





* upsert 는 해당 도큐먼트가 존재하지 않을 떄, 정의된 도큐먼트를 생성하는 명령이다.

예) $ curl -XPOST "http://localhost:9200/books/book/1/_update -d '
{
 "script" : "ctx._source.counter+=count",
 "params":"{"count" : 1},
 "upsert":"{"counter":0}
}'










댓글

이 블로그의 인기 게시물

(18장) WebSocekt과 STOMP를 사용하여 메시징하기

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬