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