Elasticsearch
Document API

Document API

세팅 & 예제 데이터 import


PUT

먼저 인덱스가 아무것도 생성되지 않은 상태에서 아래의 명령을 수행합니다.

PUT logs_index/_doc/1
{
  "message": "PAYMENT_FAILURE",
  "reason": "NETWORK_ERROR",
  "occured_service": "abc-comics-payment-api"
}

이렇게 하면 logs_index 라는 이름의 인덱스가 새로 생성되면서 데이터가 입력됩니다.


이번에는 아래의 명령을 수행합니다. 새로운 도큐먼트를 한 건 더 insert 하는 명령입니다.

PUT logs_index/_doc/2
{
  "message": "PAYMENT_SUCCESS",
  "reason": "SUCCESS",
  "occured_service": "abc-comics-payment-api"
}

실행시켜 보면 logs_index 라는 이름의 인덱스에 데이터가 insert 되었음을 결과화면에서 확인 가능합니다.


GET

처음에 insert 했던 데이터를 조회해봅니다.

GET logs_index/_doc/1

출력결과는 아래와 같습니다.

{
  "_index": "logs_index",
  "_id": "1",
  "_version": 1,
  "_seq_no": 0,
  "_primary_term": 1,
  "found": true,
  "_source": {
    "message": "PAYMENT_FAILURE",
    "reason": "NETWORK_ERROR",
    "occured_service": "abc-comics-payment-api"
  }
}

두번째 insert 했던 데이터도 존재하는지 확인해봅니다.

GET logs_index/_doc/2

출력결과는 아래와 같습니다.

{
  "_index": "logs_index",
  "_id": "2",
  "_version": 1,
  "_seq_no": 1,
  "_primary_term": 1,
  "found": true,
  "_source": {
    "message": "PAYMENT_SUCCESS",
    "reason": "SUCCESS",
    "occured_service": "abc-comics-payment-api"
  }
}

DELETE

이번에는 도큐먼트를 선택해서 삭제해봅니다. 두번째로 insert 했던 데이터를 삭제합니다.

DELETE logs_index/_doc/2

출력결과는 아래와 같습니다.

{
  "_index": "logs_index",
  "_id": "2",
  "_version": 2,
  "result": "deleted",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 2,
  "_primary_term": 1
}

POST

데이터 입력을 하는 연산입니다. PUT의 경우에는 Document id 를 입력해줘야 했습니다. POST 의 경우 Document Id 를 입력하지 않아도 됩니다.

POST logs_index/_doc
{
  "message": "PAYMENT_SUCCESS",
  "occured_service": "abc-comics-payment-api"
}

출력결과는 아래와 같습니다.

{
  "_index": "logs_index",
  "_id": "VLZ8048BRYAsCL4RpbbY", # 여기 
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 3,
  "_primary_term": 1
}

자세히 확인해보면 _id 항목에 대해 VLZ8048BRYAsCL4RpbbY 라는 값이 할당되었음을 확인 가능합니다.


UPDATE

도큐먼트를 수정하고자 할때 UPDATE 연산을 사용합니다. UPDATE 연산은 원하는 필드만 수정하는 것이 가능합니다.

POST logs_index/_update/1
{
  "doc": {
    "message": "PG_API_NETWORK_ERROR"
  }
}

출력결과

{
  "_index": "logs_index",
  "_id": "1",
  "_version": 2,
  "result": "updated",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 4,
  "_primary_term": 1
}

Bulk API

Bulk API 를 이용하면 한번의 연산으로 여러 문서를 한번에 indexing 하거나 삭제하는 것이 가능합니다. 대량 색인이 필요할 때 사용하면 됩니다.

_id 가 5, 6 인 데이터를 Bulk api 를 통해 indexing 합니다.

POST _bulk
{ "index": {"_index": "logs_index", "_id": "5"} }
{ "field": "안녕하세요 (1) 번 이에요" }
{ "index": {"_index": "logs_index", "_id": "6"} }
{ "field": "안녕하세요 (2) 번 이에요" }

이번에는 delete 와 create 연산을 함께 수행합니다.

  • _id = 5 인 도큐먼트는 삭제
  • _id = 7 인 도큐먼트 생성
POST _bulk
{ "delete": {"_index": "logs_index", "_id": "5"} }
{ "create": {"_index": "logs_index", "_id": "7"} }
{ "field": "안녕하세요 (3) 번 이에요" }

이번에는 update 연산을 수행합니다.

POST _bulk
{ "update": {"_index": "logs_index", "_id": "6"} }
{ "doc": {"field": "(5) 번 이에요"} }