본문 바로가기

Elasticsearch

[elastic search] REST API 실습 (GET, POST, PUT, DELETE, UPDATE)

반응형

 

 

실습 시작 전 

elsaticsearch 와 kibana 를 모두 on 해놓기 

 

 

1. classes라는 index(=db) 가 있는지 확인해보기 

curl -XGET http://localhost:9200/classes
// 정리된 상태로 결과물을 보려면 pretty 붙이기 
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   // -> 페이지를 찾을 수 없음 = 인덱스(db)가 없음 
}

 

 

2. classes라는 index 생성하기 

curl -XPUT http://localhost:9200/classes
{"acknowledged":true,"shards_acknowledged":true,"index":"classes"}%

 

생성된 index 조회하기 

curl -XGET http://localhost:9200/classes\?pretty
{
  "classes" : {
    "aliases" : { },
    "mappings" : { },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "provided_name" : "classes",
        "creation_date" : "1649744462934",
        "number_of_replicas" : "1",
        "uuid" : "HlpDFyhMQlGemJCREGgmMw",
        "version" : {
          "created" : "7170299"
        }
      }
    }
  }
}

 

 

 

3. 방금 생성한 classes 라는 index 삭제해보기

curl -XDELETE http://localhost:9200/classes
{"acknowledged":true}%

 

 

 

4. document 만들어보기 

* index 안에 document들을 생성하는 것인데 여기서 index가 있든 없든 상관없다. 

index가 없다면 index명과 type명을 명시해주면 된다. (-> 이제 한 index에 하나의 type만 가능해서 type명을 굳이 안적는 듯 하다. ) 

 

여기서 -H'Content-Type: application/json' <- 요 옵션이 없으면 아래와같은 에러가 난다. 

"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406

 

Elasticsearch 6.0 이후로는 content-type이 필수가 되었다고 한다. 

curl -XPOST http://localhost:9200/classes/1/ -H'Content-Type: application/json' -d ' {"title": "acb", "subject": "def"}'
{"_index":"classes","_type":"1","_id":"Y8p3HIAB0VdubgSLszWG","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}%

 

 

 

5. 해당 document 조회하기 

 

curl -GET http://localhost:9200/classes/_doc/_MqHHIAB0VdubgSLskP1\?pretty

_MqHHIAB~ <-요 부분은 해당 document의 _id 

{
  "_index" : "classes",
  "_type" : "_doc",
  "_id" : "_MqHHIAB0VdubgSLskP1",
  "_version" : 1,
  "_seq_no" : 2,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "title" : "acb",
    "subject" : "def"
  }
}

 

GET    <index>/_doc/<_id>

HEAD <index>/_doc/<_id>

GET    <index>/_source/<_id>

HEAD <index>/_source/<_id> 

 

 

 

 

7. 파일을 document으로 저장하기

 

json 파일을 -> document으로 저장하기

curl -XPOST http://localhost:9200/classes/1/ -d @[file-name].json

 

 

 

8. UPDATE 

 

update할 document 하나 생성하기 

curl -XPOST http://localhost:9200/classes/1/ -H'Content-Type: application/json' -d ' {"title": "aaaaa", "subject": "bbbbb"}'
{"_index":"classes","_type":"1","_id":"RsrDHIAB0VdubgSL6Hyy","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":5,"_primary_term":1}%

get으로 조회해보기 

curl -GET http://localhost:9200/classes/_doc/RsrDHIAB0VdubgSL6Hyy/\?pretty
{
  "_index" : "classes",
  "_type" : "_doc",
  "_id" : "RsrDHIAB0VdubgSL6Hyy",
  "_version" : 1,
  "_seq_no" : 5,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "title" : "aaaaa",
    "subject" : "bbbbb"
  }
}

update 로 수정해보기  - field 하나 추가해보기 

curl -XPOST http://localhost:9200/classes/1/RsrDHIAB0VdubgSL6Hyy/_update\?pretty -H'Content-Type:application/json' -d ' {"doc": {"content":"ccccc"} }'
{
  "_index" : "classes",
  "_type" : "1",
  "_id" : "RsrDHIAB0VdubgSL6Hyy",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 6,
  "_primary_term" : 1
}

successful : 1 (true) 이지만 잘 추가 되었는지 다시 확인해보기

curl -GET http://localhost:9200/classes/_doc/RsrDHIAB0VdubgSL6Hyy/\?pretty
{
  "_index" : "classes",
  "_type" : "_doc",
  "_id" : "RsrDHIAB0VdubgSL6Hyy",
  "_version" : 2,
  "_seq_no" : 6,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "title" : "aaaaa",
    "subject" : "bbbbb",
    "content" : "ccccc"
  }
}

_source 안에 content가 추가되었다. 

 

 

 

다시 content 내용을 10 으로 수정해보기 

- 추가할 때와 똑같다. 

curl -XPOST http://localhost:9200/classes/1/RsrDHIAB0VdubgSL6Hyy/_update\?pretty -H'Content-Type:application/json' -d ' {"doc": {"content":10} }'
curl -GET http://localhost:9200/classes/_doc/RsrDHIAB0VdubgSL6Hyy/\?pretty
{
  "_index" : "classes",
  "_type" : "_doc",
  "_id" : "RsrDHIAB0VdubgSL6Hyy",
  "_version" : 3,
  "_seq_no" : 7,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "title" : "aaaaa",
    "subject" : "bbbbb",
    "content" : 10
  }
}

 

반응형