[Elasticsearch] Elasticsearch 인덱스 및 도큐먼트 CRUD

2026. 3. 17. 19:13·ELK
더보기

인프런-실전에서 바로 써먹는 Elasticsearch 입문(검색 최적화편)을 듣고 작성한 글입니다.

Elasticsearch의 기본 용어 (vs MySQL)

Elasticsearch 특징

- 데이터베이스 

- 데이터를 저장/조회/수정/삭제할 수 있음.

- 데이터를 저장하기 위해 가장 먼저 인덱스를 만듬

- 인덱스를 만들 때 어떤 유형의 데이터를 넣을 지 매핑을 정의함.

- 테이블의 필드에 맞게 데이터를 저장함

 

MySQL 과 Elasticsearch 와 비교해서 이해하면 훨씬 쉽다.

MySQL Elasticsearch
테이블(table) 인덱스(index)
컬럼(column) 필드(field)
레코드(record), 로우(row) 도큐먼트(document)
스키마(schema) 매핑(mapping)

 

Elasticsearch의 CRUD

1. 인덱스 생성

# PUT /{인덱스명}
PUT /users

 

2. 인덱스 조회

# 인덱스 생성됐는 지 확인하기
# GET /{인덱스명}
GET /users

결과

왼: 생성된 인덱스 조회 응답 오: 생성되지 않은 인덱스 조회 응답

 

3. 인덱스 삭제

# DELETE /{인덱스명}
DELETE /boards

 

 

매핑 정의하기

매핑 정의는 MySQL에서 테이블의 스키마를 정의하는 것과 똑같다. 

# PUT /{인덱스명}/_mappings
PUT /users/_mappings
{
  "properties": {
    "name": { "type": "keyword" },
    "age": { "type": "integer" },
    "is_active": { "type": "boolean" }
  }
}


# 정의한 매핑 확인하기
GET /users

결과

{
  "users": {
    "aliases": {},
    "mappings": {
      "properties": {
        "age": {
          "type": "integer"
        },
        "is_active": {
          "type": "boolean"
        },
        "name": {
          "type": "keyword"
        }
      }
    },
    "settings": {
      "index": {
        "routing": {
          "allocation": {
            "include": {
              "_tier_preference": "data_content"
            }
          }
        },
        "number_of_shards": "1",
        "provided_name": "users",
        "creation_date": "1781617207745",
        "number_of_replicas": "1",
        "uuid": "59cO7fyoRzKnqlhMnDSn2g",
        "version": {
          "created": "8521000"
        }
      }
    }
  }
}

 

 

도큐먼트 CRUD

도큐먼트 = 데이터라고 생각하면 된다.

 

1-1. 도큐먼트 삽입(랜덤 id)

# POST /{인덱스명}/_doc
POST /users/_doc
{
  "name": "bob",
  "age": 30,
  "is_active": true
}

 

1-2. 도큐먼트 삽입(id 지정)

_create를 이용해서 도큐먼트를 삽입했을 시 똑같은 도큐먼트를 또 입력하면 입력 오류가 난다.

# POST /{인덱스명}/_create/{id}
POST /users/_create/1
{
  "name": "jscode",
  "age": 30,
  "is_active": true
}

 

 

2-1. 모든 도큐먼트 조회

# GET /{인덱스명}/_search
GET /users/_search

응답 결과에 hits 부분을 보면 조회된 도큐먼트를 확인할 수 있다.

_id를 보면 랜덤으로 생성된 id와 지정한 id의 데이터들이 조회된 것을 확인할 수 있다.

_source : 삽입한 데이터의 원본

 

2-2. 특정 데이터 조회

# GET /{index}/_doc/{id}
GET /users/_doc/1

결과

 

 

3-1. 도큐먼트 수정(통째로)

수정이라 써놨지만, PUT은 입력의 기능도 한다.

처음으로 PUT /{인덱스명}/_doc/{id} 을 입력하면 결과에 "result" : "created가 뜨고

동일한 URL에 다른 내용의 도큐먼트를 다시 입력하게 되면 "result" : "updated"가 된다. 

# PUT /{인덱스명}/_doc/{id}
PUT /users/_doc/1
{
  "name": "new"
}

결과

_id 1의 데이터가 통째로 수정되었다.

 

3-2. 도큐먼트 수정(일부 필드)

# POST /{인덱스명}/_update/{id}
POST /users/_update/2
{
  "doc": {
	  "age": 10,
	  "is_active": false
  }
}

결과

_id 2의 데이터의 일부(name, is_active)값만 수정되었다. 

 

4. 도큐먼트 삭제

# DELETE /{인덱스명}/_doc/{id} 
DELETE /users/_doc/2

 

 

도큐먼트 CRUD 총 정리

도큐먼트 조회

GET /{인덱스명}/_search 모든 도큐먼트 조회
GET /{index}/_doc/{id} id로 특정 도큐먼트 조회

 

도큐먼트 저장과 수정

POST /{인덱스명}/_doc 도큐먼트 저장 (id 자동 생성)
POST /{인덱스명}/_create/{id} 도큐먼트 저장 (id 직접 지정)
PUT /{인덱스명}/_doc/{id} 특정 도큐먼트 통째로 수정(=UPSERT)
POST /{인덱스명}/_update/{id} 특정 도큐먼트 일부 필드 수정

즉, 단순히 "저장"과 "수정"만 구분하는 것이 아니라, ID 생성 방식(자동/수동) 과 기존 데이터 처리 방식(생성만 가능, 전체 교체, 부분 수정) 에 따라 서로 다른 API를 제공한다.

또한 _create API는 POST뿐만 아니라 PUT /{index}/_create/{id} 형태로도 사용할 수 있으며, 두 방식 모두 이미 동일한 ID의 문서가 존재할 경우 생성에 실패한다. 다만, 처음 학습할 때는 위의 표 참고해 4가지 방식으로 구분하는게 좋을 것 같다.

https://esbook.kimjmin.net/04-data/4.2-crud#request-2

 

4.2 CRUD - 입력, 조회, 수정, 삭제 | Elastic 가이드북

이 문서의 허가되지 않은 무단 복제나 배포 및 출판을 금지합니다. 본 문서의 내용 및 도표 등을 인용하고자 하는 경우 출처를 명시하고 김종민(kimjmin@gmail.com)에게 사용 내용을 알려주시기 바랍

esbook.kimjmin.net

 

도큐먼트 삭제

DELETE /{인덱스명}/_doc/{id} 도큐먼트 삭제

'ELK' 카테고리의 다른 글

[Elasticsearch] ElasticSearch, Kibana 설치하기  (4) 2026.03.14
[Elastic Stack] ELK Stack 기반 로그 모니터링 시스템  (2) 2026.03.10
'ELK' 카테고리의 다른 글
  • [Elasticsearch] ElasticSearch, Kibana 설치하기
  • [Elastic Stack] ELK Stack 기반 로그 모니터링 시스템
지-토리
지-토리
  • 지-토리
    지토리의 개발이야기
    지-토리
  • 전체
    오늘
    어제
    • 분류 전체보기 (46)
      • [AND] 사용자 정의 지표 기반 실시감 감지 및.. (13)
        • 기획 (4)
        • 기술 (8)
      • [Linkompany] 뉴스와 공시를 통합 기업 .. (4)
      • [Candly] 차트 공부 및 예측 웹 프로젝트 (2)
      • JAVA (4)
        • 코딩테스트 (1)
      • 대규모 시스템 설계 (1)
      • Infra (12)
      • ELK (3)
      • AI (2)
      • FrontEnd (1)
      • TIP (2)
      • 자격증 (1)
  • 블로그 메뉴

    • 홈
    • Github
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    kpt
    프로디지털아카데미
    K디지털트레이닝
    신한투자증권
    프로젝트
    알파코캠퍼스
    Firebase
    SpringSecurity
    부트캠프
    EC2
    인프런
    인증/인가
    프디아
    kdt교육
    신투
    Issue
    K8S
    And
    쿠버네티스
    알파코
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
지-토리
[Elasticsearch] Elasticsearch 인덱스 및 도큐먼트 CRUD
상단으로

티스토리툴바