# ElasticSearch 데이터 입력, 조회, 삭제 실습

img


# 실습 환경

  • 💡 Elasticsearch 7.9.0
  • 💡 Windows 10
  • 💡 Git Bash

시작하기 전 지난 포스팅에 정리한 표를 참고하고자 아래에 넣어두겠다.

GET, POST, PUT, DELETE 를 먼저 실습해보고자 한다.


ElasticSearch RDB
Index Database
Type Table
Document Row
Field Column
Mapping Schema

▲ 저장 구조


ElasticSearch RDB CRUD
GET Select Read
POST Insert Create
PUT Update Update
DELETE Delete Delete

▲ Query


# 1. (Create) Index 만들기

아래 명령어를 입력하면 index가 생성된다.

$ curl -XPUT http://localhost:9200/classes?pretty

결과

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "classes"
}

# 2. (Read) Index 조회하기

index가 잘 만들어졌는지 확인해보자.

$ curl -XGET http://localhost:9200/classes?pretty

결과

{
  "classes" : {
    "aliases" : { },
    "mappings" : { },
    "settings" : {
      "index" : {
        "creation_date" : "1597992858432",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "vPVLv77BSICCXk9VWekU_w",
        "version" : {
          "created" : "7090099"
        },
        "provided_name" : "classes"
      }
    }
  }
}

# 3. (Delete) Index 삭제하기

삭제해보자.

$ curl -XDELETE http://localhost:9200/classes?pretty

결과

{
  "acknowledged" : true
}

잘 삭제되었는지 확인해보자.

$ curl -XGET http://localhost:9200/classes?pretty

결과

{
  "error" : {
    "root_cause" : [
      {
        "type" : "index_not_found_exception",
        "reason" : "no such index [classes]",
        "resource.type" : "index_or_alias",
        "resource.id" : "classes",
        "index_uuid" : "_na_",
        "index" : "classes"
      }
    ],
    "type" : "index_not_found_exception",
    "reason" : "no such index [classes]",
    "resource.type" : "index_or_alias",
    "resource.id" : "classes",
    "index_uuid" : "_na_",
    "index" : "classes"
  },
  "status" : 404
}

없는 index에 접근해 404 에러를 띄우는 것을 확인할 수 있다.

# 4. (Create) Document 만들기

Table의 Row와 유사한 개념으로 JSON 형식의 문서라는 차이점이 있다.

아래 명령어를 통해 생성할 수 있다.

$ curl -XPOST http://localhost:9200/classes/class/1/ -d '{"title" : "ElasticSearch", "professor" : "Youngjun_Park"}'

Window10 환경에서 실행하여 406 Error가 출력된다면 이 명령어를 사용하면 된다.

$ curl -XPOST http://localhost:9200/classes/class/1/?pretty \
  -H 'Content-Type: application/json' \
  -d '{"title" : "ElasticSearch", "professor" : "Youngjun_Park"}'

그래도 안된다면 내가 겪었던 문제와 같을 것 같으니 Error-Handling page를 참고하도록 하자!

정상적으로 생성됐다면 아래와 비슷한 출력을 볼 수 있다.

{
  "_index" : "classes",
  "_type" : "class",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

잘 생성됐는지 확인해보자.

$ curl -XGET http://localhost:9200/classes/class/1/?pretty

결과

{
  "_index" : "classes",
  "_type" : "class",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "title" : "ElasticSearch",
    "professor" : "Youngjun_Park"
  }
}

# 5. JSON File의 데이터 삽입하기

매번 데이터를 넣을 때 마다 위와 같이 작성할 수는 없다.

아래에 보이는 JSON 파일 데이터를 Insert해보자.

{
	"title" : "Algorithm",
	"Professor" : "Youngjun Park",
	"major" : "Computer Science",
	"semester" : ["spring", "fall"],
	"student_count" : 100,
	"unit" : 3,
	"rating" : 5
}

@'file명' 을 포함한 다음 명령어를 통해 JSON 데이터를 삽일할 수 있다.

curl -XPUT -H 'Content-Type: application/json' http://localhost:9200/classes/class/1/?pretty -d @oneclass.json

결과

{
  "_index" : "classes",
  "_type" : "class",
  "_id" : "1",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1,
  "_primary_term" : 1
}

데이터가 잘 들어갔는지 확인해보자.

curl -GET http://localhost:9200/classes/class/1/?pretty

결과

{
  "_index" : "classes",
  "_type" : "class",
  "_id" : "1",
  "_version" : 2,
  "_seq_no" : 1,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "title" : "Algorithm",
    "Professor" : "Youngjun Park",
    "major" : "Computer Science",
    "semester" : [
      "spring",
      "fall"
    ],
    "student_count" : 100,
    "unit" : 3,
    "rating" : 5
  }
}

본 포스팅은 InflearnELK 스택 (ElasticSearch, Logstash, Kibana) 으로 데이터 분석 (opens new window) 강의를 참고하여 작성되었습니다.

Last Updated: 6/18/2023, 2:13:15 PM