[Updating Documents]

Document index하고 replace 있을 뿐만 아니라, 또한 document update 수도 있다. Elasticsearch 실제로는 제자리 (이전 데이터를 덮어쓰는) 업데이트를 하지 않는다. Elasticsearch old document 삭제하고, 한번 업데이트 했다는 내용이 적용된 새로운 document index한다.


다음 예제는 이전 document (ID 1) 어떻게 이름을 "Jane Doe" 변경한 새로운 document 업데이트 되는지를 보여준다.


curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d '
{
  "doc": { "name": "Jane Doe" }
}'


다음 예제는 이전 document (ID 1) 어떻게 이름을 "Jane Doe" 변경하고 age 필드가 새로 추가된 새로운 document 업데이트 되는지를 보여준다.


curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d '
{
  "doc": { "name": "Jane Doe", "age": 20 }
}'


업데이트는 간단한 스크립트로 수행될 수도 있다. 다음에 나타나는 dynamic script 1.4.3에서는 기본적으로 사용할 없다. 자세한 내용은 Scripting Docs (http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html)에서 확인할 있다. 다음 예제는 script 나이를 5 증가시키는 것이다.


curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d '
{
  "script" : "ctx._source.age += 5"
}'


위의 예제에서 ctx._source 업데이트 되는 현재 source document 나타낸다.

스크립트는 한번에 하나의 document 대해서만 update 수행할 있다. 나중에는 elasticsearch에서 주어진 query 조건에 따라 여러 document update하는 기능을 지원할 것이다. (SQL문의 Update - Where 문과 유사한 기능 제공 예정)

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/695

Elasticsearch data manipulation 실시간 (near realtime) 검색 기능을 제공한다. 기본적으로 실제로 data  index/update/delete 시점에서 검색 결과로 나타나기까지 1 delay (refresh interval) 발생한다. 이것은 transaction 완료된 이후에 즉시 data 나타나는 SQL 같은 다른 platform 가장 중요한 차이점이다.


[Indexing/Replacing Documents]

앞에서 어떻게 single document index하는지 살펴보았다. 그때 command 다시 호출해 보자.


curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
{
  "name": "John Doe"
}'


위의 command customer index external type으로 ID 1 document index 것이다. 만약 다른 document (혹은 같은) 위의 command 다시 실행하면, elasticsecarh 기존에 존재하는 ID 1 새로운 document replace 것이다.


curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
{
  "name": "Jane Doe"
}'


위의 command ID 1 document 내용 중에서 이름을 "John Doe"에서 "Jane Doe" 변경한다. 다른 한편, 만약 다른 ID 사용한다면, 새로운 document index되고, 기존에 입력한 document 변경되지 않고 남아 있게 된다.


curl -XPUT 'localhost:9200/customer/external/2?pretty' -d '
{
  "name": "Jane Doe"
}'


위의 결과로 ID 2 가지는 새로운 document index된다.


Index , ID part optional이다. ID 지정되지 않으면 elasticsearch random ID 생성하고 그것을 이용해 document를 index한다. Elasticsearch 생성한 ID (이전에 명시적으로 지정한 ID 마찬가지로) index API call 부분으로 리턴된다.


명시적인 ID 지정하지 않고 document index하기 위한 예제는 다음과 같다.


curl -XPOST 'localhost:9200/customer/external?pretty' -d '
{
  "name": "Jane Doe"
}'


명시적으로 ID 지정하지 않을 때는 PUT 대신 POST 사용한다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/694

[Delete an Index]

이제 앞에서 생성했던 index 삭제하고 다시 index list 조회해 보자.


curl -XDELETE 'localhost:9200/customer?pretty'
curl
'localhost:9200/_cat/indices?v'


응답 결과는 다음과 같다.


curl -XDELETE 'localhost:9200/customer?pretty'
{
 
"acknowledged" : true
}
curl
'localhost:9200/_cat/indices?v'
health index pri rep docs
.count docs.deleted store.size pri.store.size


Index 성공적으로 삭제되었음을 나타낸다. 그리고 아무것도 없이 cluster 시작되었을 때로 되돌아 갔음을 있다. 이동하기 전에, API command 대해서 조금 깊이 들어가서 배워 보자.


curl -XPUT 'localhost:9200/customer'
curl
-XPUT 'localhost:9200/customer/external/1' -d '
{
  "name": "John Doe"
}'

curl
'localhost:9200/customer/external/1'
curl
-XDELETE 'localhost:9200/customer'


위의 command 주의 깊게 살펴보면, elasticsearch에서 어떻게 data access하는지 있다. 다음과 같은 패턴으로 요약될 있다.


curl -X<REST Verb> <Node>:<Port>/<Index>/<Type>/<ID>


이러한 REST access 패턴은 모든 API command 구석구석 숨어 있다. 여러분이 이것을 기억하고 있다면, 좋은 머리로elasticsearch 마스터할 있다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/693

[Index and Query a Document]

이제 customer index 무엇인가를 집어 넣어 보자. 앞의 내용에 대한 기억을 되살려보면, document index하기 위하여 elasticsearch index 어느 Type인지를 알려주어야 한다.


Customer index "external" type 다음과 같은 간단한 customer document index 보자.


JSON Document {"name":"John Doe"}이다.


curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
{
  "name": "John Doe"
}'


응답 결과는 다음과 같다.


curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
{
  "name": "John Doe"
}'

{
 
"_index" : "customer",
 
"_type" : "external",
 
"_id" : "1",
 
"_version" : 1,
 
"created" : true
}


위에서 살펴보면, 새로운 customer document customer index내에 성공적으로 생성되었음을 있다. 생성된 document 내부적으로 특정 index time 1이라는 ID를 갖는다. Elasticsearch document index하기 전에 명시적으로 customer index 먼저 생성하도록 요구하지 않는다는 것에 주목하라. 이전 예제에서 살펴보면, elasticsearch 이전에 customer index 존재하지 않으면 자동으로 customer index 생성한다. 이제 index document 조회해 보자.


curl -XGET 'localhost:9200/customer/external/1?pretty'


응답 결과는 다음과 같다.


curl -XGET 'localhost:9200/customer/external/1?pretty'
{
 
"_index" : "customer",
 
"_type" : "external",
 
"_id" : "1",
 
"_version" : 1,
 
"found" : true, "_source" : { "name": "John Doe" }
}


found 필드 외에는 모두 일반적으로 나타나는 필드이다. 이전 단계에서 index JSON document _source 필드에 있다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/692

[Create an Index]

, 이제 "customer"라는 이름을 가지는 index 생성해 보자. 그리고 , 다시 모든 index list 조회해 보자.


curl -XPUT 'localhost:9200/customer?pretty'
curl
'localhost:9200/_cat/indices?v'


번째 command http PUT method "customer"라는 이름을 갖는 index 생성한다. 간단히 pretty 끝에 호출하여 JSON 응답을 출력할 있다.

응답 결과는 다음과 같다.


curl -XPUT 'localhost:9200/customer?pretty'
{
 
"acknowledged" : true
}

curl 'localhost:9200/_cat/indices?v'
health index    pri rep docs
.count docs.deleted store.size pri.store.size
yellow customer  
5   1          0            0       495b           495b


번째 command 응답 결과를 통해서 customer 이름의 index 1개가 있고, 5개의 primary shard 1개의 replica 있음을 있다. 아직 document 없다.


Customer index yellow health tag되어 있음을 있다. 이전에 논의했던 내용을 되새겨 보면, yellow 아직 replica 할당되어 있지 않았음을 의미함을 있다. 이유는 elasticsearch에서 index 대해 하나의 replica default 생성했기 때문이다. 순간, 하나의 node만을 가지고 있기 때문에 다른 node cluster join 때까지 replica 할당되지 않는다. Replica second node 할당되면 health status green으로 바뀐다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/691