(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}
}'
댓글
댓글 쓰기