새소식

300x250
4.Linux

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

  • -
728x90

[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"

  }

}



300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.