Elasticsearch의 도큐먼트 URL 구조

  • Elasticsearch에서는 단일 도큐먼트마다 고유한 URL을 갖습니다.
  • 도큐먼트 접근 URL 구조:
    http://<호스트>:<포트>/<인덱스>/_doc/<도큐먼트 ID>
    
  • Elasticsearch 6.x 이전 버전에서는 다음과 같은 구조였으나,
    http://<호스트>:<포트>/<인덱스>/<도큐먼트 타입>/<도큐먼트 ID>
    
    Elasticsearch 7.0부터도큐먼트 타입 개념이 제거되고 _doc으로 접근해야 합니다.

데이터 입력 (Create & Update)

PUT 요청으로 도큐먼트 입력

PUT my_index/_doc/1
{
  "name": "Jongmin Kim",
  "message": "안녕하세요 Elasticsearch"
}
  • 결과 예시
    {
      "_index": "my_index",
      "_type": "_doc",
      "_id": "1",
      "_version": 1,
      "result": "created",
      "_shards": {"total": 2, "successful": 1, "failed": 0},
      "_seq_no": 0,
      "_primary_term": 1
    }
    
  • 같은 ID로 다시 입력하면 기존 데이터가 덮어쓰기(Overwrite)되며 "result": "updated" 로 변경됩니다.

데이터 덮어쓰지 않고 새 도큐먼트만 입력 (_create 사용)

PUT my_index/_create/1
{
  "name": "Jongmin Kim",
  "message": "안녕하세요 Elasticsearch"
}
  • 이미 ID가 존재하는 경우 오류 발생:
    {
      "error": {
        "type": "version_conflict_engine_exception",
        "reason": "document already exists"
      },
      "status": 409
    }
    

데이터 조회 (Read)

GET 요청으로 도큐먼트 조회

GET my_index/_doc/1
  • 응답 예시:
    {
      "_index": "my_index",
      "_type": "_doc",
      "_id": "1",
      "_version": 1,
      "found": true,
      "_source": {
        "name": "Jongmin Kim",
        "message": "안녕하세요 Elasticsearch"
      }
    }
    
  • 삭제된 도큐먼트 또는 없는 도큐먼트 조회 시
    {
      "_index": "my_index",
      "_type": "_doc",
      "_id": "1",
      "found": false
    }
    

데이터 수정 (Update)

부분 업데이트 (_update API 사용)

  • 특정 필드만 수정할 때 사용 (doc 키워드 활용)
POST my_index/_update/1
{
  "doc": {
    "message": "안녕하세요 Kibana"
  }
}
  • 응답 결과 (_version 증가)
    {
      "_index": "my_index",
      "_type": "_doc",
      "_id": "1",
      "_version": 2,
      "result": "updated",
      "_shards": {"total": 2, "successful": 1, "failed": 0}
    }
    
  • 주의사항: 내부적으로 기존 도큐먼트를 가져와 변경 후 새 도큐먼트로 재저장하는 방식이므로 부분 업데이트처럼 보이지만 실제로는 전체 덮어쓰기가 발생합니다.

데이터 삭제 (Delete)

도큐먼트 삭제

DELETE my_index/_doc/1
  • 응답 결과
    {
      "_index": "my_index",
      "_type": "_doc",
      "_id": "1",
      "result": "deleted"
    }
    
  • 삭제된 도큐먼트 조회 시
    {
      "_index": "my_index",
      "_type": "_doc",
      "_id": "1",
      "found": false
    }
    

전체 인덱스 삭제

DELETE my_index
  • 응답 결과
    {
      "acknowledged": true
    }
    
  • 삭제된 인덱스의 도큐먼트 조회 시 오류 발생
    {
      "error": {
        "type": "index_not_found_exception",
        "reason": "no such index"
      },
      "status": 404
    }
    

자동 생성되는 도큐먼트 ID 활용

POST 요청으로 자동 생성되는 도큐먼트 ID

POST my_index/_doc
{
  "name": "Jongmin Kim",
  "message": "안녕하세요 Elasticsearch"
}
  • 응답 결과 (_id가 자동 생성됨)
    {
      "_index": "my_index",
      "_type": "_doc",
      "_id": "ZuFv12wBspWtEG13dOut",
      "_version": 1,
      "result": "created"
    }
    

Elasticsearch 6.x 이전 버전과의 차이점

항목 6.x 이전 버전 7.0 이후
도큐먼트 URL 구조 /index/type/id /index/_doc/id
새 도큐먼트 입력 PUT index/type/id/_create PUT index/_create/id
부분 업데이트 (_update API) POST index/type/id/_update POST index/_update/id

정리

작업 HTTP 메서드 예제
도큐먼트 입력 PUT PUT my_index/_doc/1
자동 ID 생성 POST POST my_index/_doc
부분 업데이트 POST POST my_index/_update/1 {"doc": {"message": "변경됨"}}
도큐먼트 조회 GET GET my_index/_doc/1
도큐먼트 삭제 DELETE DELETE my_index/_doc/1
전체 인덱스 삭제 DELETE DELETE my_index

🎯 추가로 알아두면 좋은 개념

  1. 버전 관리 (_version): Elasticsearch는 도큐먼트의 변경 시 버전을 증가시킵니다.
  2. 샤드 & 레플리카: 데이터를 분산 저장하여 고가용성을 유지합니다.
  3. Query DSL: 복잡한 검색 기능을 위한 JSON 기반의 질의 언어입니다.
  4. Bulk API: 대량의 데이터를 한 번에 처리할 수 있는 API입니다.

 

'Elastic Search > Elastic 데이터 처리' 카테고리의 다른 글

[Elasticsearch] Search API  (0) 2025.02.03
[Elasticsearch] REST API  (0) 2025.02.03

+ Recent posts