2.X/1. Getting Started

1-03-07. Creating a New Document

drscg 2017. 10. 1. 11:26

How can we be sure, when we index a document, that we are creating an entirely new document and not overwriting an existing one?

document를 색인할 때, 기존 document를 덮어쓰는 것이 아니라, 완전히 새로운 것을 생성한다는 것을 어떻게 보장할 수 있을까?

Remember that the combination of _index_type, and _id uniquely identifies a document. So the easiest way to ensure that our document is new is by letting Elasticsearch autogenerate a new unique _id, using the POST version of the index request:

_index_type_id 의 조합으로, document를 유일하게 식별할 수 있다는 것을 기억해 보자. 따라서 document가 새로운 것이라는 보장하는 가장 가장 쉬운 방법은, index request에 POST 를 사용하고, Elasticsearch가 새로운 유일한 _id 를 자동 생성하도록 하는 것이다.

POST /website/blog/
{ ... }

However, if we already have an _id that we want to use, then we have to tell Elasticsearch that it should accept our index request only if a document with the same _index_type, and _id doesn’t exist already. There are two ways of doing this, both of which amount to the same thing. Use whichever method is more convenient for you.

그러나, 사용하려는 _id 를 이미 가지고 있다면, 동일한 _index_type_id 를 가진 document가 아직 존재하지 않는 경우에만, Elasticsearch가 index request를 받아들이도록 해야 한다. 두 가지 방법이 있는데, 두 가지 모두 마찬가지이다. 편리한 방법을 사용하자.

The first method uses the op_type query -string parameter:

첫 번째 방법은 op_type query-string 매개변수를 사용하는 것이다.

PUT /website/blog/123?op_type=create
{ ... }

And the second uses the /_create endpoint in the URL:

두 번째 방법은 URL의 마지막에 /_create 를 사용하는 것이다.

PUT /website/blog/123/_create
{ ... }

If the request succeeds in creating a new document, Elasticsearch will return the usual metadata and an HTTP response code of 201 Created.

request가 새로운 document를 생성하는데 성공하면, Elasticsearch는 일반적인 metadata와 HTTP response code 201 Created 를 반환할 것이다.

On the other hand, if a document with the same _index_type, and _id already exists, Elasticsearch will respond with a 409 Conflict response code, and an error message like the following:

반면에, 동일한 _index_type_id 를 가진 document가 이미 존재하면, Elasticsearch는 아래와 같이 response code 409 Conflict 와 error 메시지로 response할 것이다.

{
   "error": {
      "root_cause": [
         {
            "type": "document_already_exists_exception",
            "reason": "[blog][123]: document already exists",
            "shard": "0",
            "index": "website"
         }
      ],
      "type": "document_already_exists_exception",
      "reason": "[blog][123]: document already exists",
      "shard": "0",
      "index": "website"
   },
   "status": 409
}