YOGAE

TODO: FIXME:

Modifying Your Data

04 Jan 2019

Elasticsearch는 near real time으로 data를 조작하고 검색할 수 있습니다. SQL과 같은 다른 platform과의 중요한 차이는 transaction이 완료된 이후 바로 사용가능하다는 것 입니다.

Indexing/Replacing Documents

다른 document로 같은 id에 put 명령을 실행하면 Elasticsearch는 새로운 document로 대체할 것 입니다.

indexing할 때 ID part는 optional입니다. 특정 ID를 정하지 않는다면 Elasticsearch는 random한 ID를 생성하고 documnet를 index할 것입니다.

POST /customer/_doc?pretty
{
  "name": "Jane Doe"
}

특정 ID를 지정하지 않을 때는 PUT 대신 POST를 사용합니다.

Updaing Documents

Elasticsearch는 이전 document를 삭제하고 새로운 document를 index합니다.

POST /customer/_doc/1/_update?pretty
{
  "doc": { "name": "Jane Doe" }
}
POST /customer/_doc/1/_update?pretty
{
  "doc": { "name": "Jane Doe", "age": 20 }
}
POST /customer/_doc/1/_update?pretty
{
  "script" : "ctx._source.age += 5"
}

ctx._source는 update할 현재 document를 말합니다. Elasticsearch는 여러 document를 한번에 update할 수 있는 기능을 제공합니다. docs-update-by-query API

Deleting Documents

DELETE /customer/_doc/2?pretty

query에 검색하여 모든 document를 제거하기 위해서는 _delete_by_query API 를 사용합니다.

Batch Processing

Elasticsearch는 index, update, delete와 같은 operation에 대하여 _bulk API를 사용하여 batch처리를 할 수 있습니다.

2개의 document를 생성합니다.

POST /customer/_doc/_bulk?pretty
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }
POST /customer/_doc/_bulk?pretty
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}

bulk API는 나의 action이 실패하여도 실패처리되지 않습니다. 하나의 action이 실패하면 나머지 action을 계속해서 처리합니다. Bulk API가 결과를 반환할 때 각각의 action에 상태를 제공합니다.