본문 바로가기
5.Linux

11-2. [CentOS7] Elasticsearch 데이터 입력,조회,삭제, 업데이트 기본

by 갓대희 2018. 2. 14.
반응형

[CentOS7] Elasticsearch 데이터 입력,조회,삭제, 업데이트 기본



▶ Elastic Search는 rest API를 사용.


▶ Elastic Search <> Realation DB 비교


Index     <>  Database

Type     <>  Table

Document<>  Row

Field     <>  Column

Mapping  <>  Schema


GET      <>  Select

PUT      <>  Update 

POST    <>  Insert

DELETE  <>  Delete


ex) get

curl -XGET localhost:9200/classes/class/1

select * from class where id = 1


ex) post

curl -XPOST localhost:9200/classes/class/1 -d '{xxx}'

insert into class values (xxx)


ex) put

curl -XPUT localhost:9200/classes/class/1 -d '{xxx}'

update class set xxx where id = 1;


ex) delete

curl -XDELETE localhost:9200/classes/class/1

delete from class where id = 1;




▶ 인덱스가 있는지 없는지 확인 (ex : claases 라는 인덱스가 있는지 확인)



[root@goddaehee ~]# curl -XGET localhost:9200/classes

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

"type":"index_not_found_exception","reason":"no such index","resource.type":"index_or_alias","resource.id":"classes","index_uuid":"_na_","index":"classes"},"status":404}[root@goddaehee ~]#




여기에서 결과값을 알아보기 힘들게 나오기 때문에 ?pretty를 붙여주면 훨씬 깔끔하게 보여준다.



[root@goddaehee ~]# curl -XGET localhost:9200/classes?pretty

{

  "error" : {

    "root_cause" : [

      {

        "type" : "index_not_found_exception",

        "reason" : "no such index",

        "resource.type" : "index_or_alias",

        "resource.id" : "classes",

        "index_uuid" : "_na_",

        "index" : "classes"

      }

    ],

    "type" : "index_not_found_exception",

    "reason" : "no such index",

    "resource.type" : "index_or_alias",

    "resource.id" : "classes",

    "index_uuid" : "_na_",

    "index" : "classes"

  },

  "status" : 404

}




▶ 인덱스 생성



[root@goddaehee ~]# curl -XPUT localhost:9200/classes?pretty

{

  "acknowledged" : true,

  "shards_acknowledged" : true,

  "index" : "classes"

}





▶ 인덱스 삭제



[root@goddaehee ~]# curl -XDELETE localhost:9200/classes?pretty

{

  "acknowledged" : true

}




▶ 도큐먼트 생성

 - 인덱스 + type명 을 통해서도 생성가능



[root@goddaehee ~]# curl -XPOST localhost:9200/classes/class/1/ -d '

{"title" : "math", "professor" : "Goddaehee"}'

{"error":"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406}[root@goddaehee ~]#



위와 같이 에러가 바생한다....

엘라스틱서치6버전이 이후부터는 head값까지 상세히 적어줘한다고 한다.




[root@goddaehee ~]curl -H 'Content-Type: application/json' -XPOST localhost:9200/classes/class/1/ -d '

{"title" : "math", "professor" : "Goddaehee"}'



성공!!@




▶ 직접 값을 입력하지 않고 Json 파일을 통해서도 입력 가능하다.


vi goddaehee


{

    "이름": "갓댐",

    "나이": 30,

    "성별": "남",

    "주소": "서울특별시 강동구 둔촌2동",

    "특기": ["음악", "운동"],

    "가족관계": {"아버지": "갓갓", "어머니": "가가갓"}

}


입력 후


[root@goddaehee ~]curl -H 'Content-Type: application/json' -XPOST localhost:9200/classes/class/2/ -d @goddamn.json

{

    "이름": "갓댐",

    "나이": 30,

    "성별": "남",

    "주소": "서울특별시 강동구 둔촌2동",

    "특기": ["음악", "운동"],

    "가족관계": {"아버지": "갓갓", "어머니": "가가갓"}

}



결과 확인


[root@goddaehee ~]# curl -XGET localhost:9200/classes/class/2?pretty

{

  "_index" : "classes",

  "_type" : "class",

  "_id" : "2",

  "_version" : 1,

  "found" : true,

  "_source" : {

    "이름" : "갓댐",

    "나이" : 30,

    "성별" : "남",

    "주소" : "서울특별시 강동구",

    "특기" : [

      "음악",

      "운동"

    ],

    "가족관계" : {

      "아버지" : "갓갓",

      "어머니" : "가가갓"

    }

  }

}





▶ 데이터 업데이트 첫 번째 방법


참고 ) 

기존 데이터

curl -H 'Content-Type: application/json' -XPOST localhost:9200/classes/class/1/ -d '

{"title" : "math", "professor" : "Goddaehee"}'



교수님 이름을 Goddaehee2 로 변경


[root@goddaehee ~]# curl -H 'Content-Type: application/json' -XPOST localhost:9200/classes/class/1/_update?pretty -d '

{"doc" : {"professor" : "Goddaehee2"}}'

{

  "_index" : "classes",

  "_type" : "class",

  "_id" : "1",

  "_version" : 5,

  "result" : "updated",

  "_shards" : {

    "total" : 2,

    "successful" : 1,

    "failed" : 0

  },

  "_seq_no" : 4,

  "_primary_term" : 1

}


## 결과 확인


[root@goddaehee ~]# curl -XGET localhost:9200/classes/class/1?pretty

{

  "_index" : "classes",

  "_type" : "class",

  "_id" : "1",

  "_version" : 6,

  "found" : true,

  "_source" : {

    "title" : "math",

    "professor" : "Goddaehee2"

  }

}





▶ 데이터 업데이트 두 번째 방법 - 스크립트

교수님 이름을 Goddaehee23 로 변경


[root@goddaehee ~]# curl -H 'Content-Type: application/json' -XPOST localhost:9200/classes/class/1/_update?pretty -d '

{"script" : "ctx._source.professor += goddaehee3" }'

{

  "_index" : "classes",

  "_type" : "class",

  "_id" : "1",

  "_version" : 6,

  "result" : "updated",

  "_shards" : {

    "total" : 2,

    "successful" : 1,

    "failed" : 0

  },

  "_seq_no" : 5,

  "_primary_term" : 1

}


## 결과 확인


[root@goddaehee ~]# curl -XGET localhost:9200/classes/class/1?pretty

{

  "_index" : "classes",

  "_type" : "class",

  "_id" : "1",

  "_version" : 6,

  "found" : true,

  "_source" : {

    "title" : "math",

    "professor" : "Goddaehee23"

  }

}



반응형

댓글4

  • 피부탄 2019.01.24 11:09

    스크롤 내리다 둔촌동보고 깜짝놀랐네요.
    같은 둔촌동 주민이면 반갑습니다 ㅎㅎ
    답글

    • Favicon of https://goddaehee.tistory.com BlogIcon 갓대희 2019.01.24 20:10 신고

      넵.ㅋㅋㅋ
      둔촌주민입니다. 개발자신가보네요 ㅋㅋ 반갑습니당 둔촌주민 ㅋㅋ

    • dev.noob 2020.06.29 13:55

      ㅋㅋㅋ전 성내동 살지만 보성고 나왔습니다.ㅋㅋ 어제도 둔촌동 다녀왔습니다.

      둔촌 개발자님들 반갑습니당

  • 익명 2019.06.18 15:46

    비밀댓글입니다
    답글