GET 부터 검색 시작
앞선 포스트에서, 우리는 다음과 같은 테이블을 보았다.
ElasticSearch | RDB |
GET | Select |
PUT | Update |
POST | Insert |
DELETE | Delete |
따라서, GET으로 검색을 해보도록 하자.
curl -XGET http://localhost:9200/classes
curl -XGET http://localhost:9200/classes?pretty
위 명령어를 통해, 우리는 curl을 사용하여 GET을 해오고 있다는 것을 볼 수 있다.
향후, 모든 Method활용에서 동일하겠지만, classes라는 index에 대해 요청하는 내용이며, 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
}
위 결과값에서 404 status가 나온 것을 통해, 아직 classes라는 index가 없다는 것을 알 수 있다.
PUT 으로 생성
GET으로 아직 classes라는 index가 없는 것을 알았으니, PUT으로 생성을 해보자.
curl -XPUT http://localhost:9200/classes
{
"classes" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index" : {
"creation_date" : "1574178750443",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "79MBiumdQAqdLjgIx85ZqA",
"version" : {
"created" : "7040299"
},
"provided_name" : "classes"
}
}
}
}
더 이상, 404 status가 나오지 않으며, classes라는 index가 생성되었다는 것을 볼 수 있다.
DELETE 로 삭제까지
PUT으로 생성을 진행했으니, 이제는 삭제를 해보자.
curl -XDELETE http://localhost:9200/classes
{
"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
}
위와 같이, 삭제를 진행하면 다시 status가 404로 바뀌며 해당하는 index가 없다는 내용을 확인할 수 있다.
POST 로 Document 만들기
PUT으로 index를 생성해보았다. 이제는 POST로 실제 Document를 만들 것이다.
단, 이 때 index가 없다면, 자동으로 생성이 되니 유의하도록 하자.
curl -XPOST http://localhost:9200/classes/class/1 -H'Content-Type: application/json' -d '{"title": "Algorithm", "professor": "John"}'
curl -XGET http://localhost:9200/classes/class/1?pretty
{
"_index" : "classes",
"_type" : "class",
"_id" : "1",
"_version" : 4,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"title" : "Algorithm",
"professor" : "John"
}
}
주의해서 보면, -H라는 argument를 하나더 추가했다는 것을 알 수 있다.
일반 실습 영상에서는 없었으나, Elasticsearch 6.0 이후 버전에 도입된 엄격한 content-type 확인으로 인해서 추가해야 한다.
추가로, 우리가 argument로 document를 등록하는 경우는 거의 없고, 보통 파일을 사용하는데 이 때는 다음과 같이 가능하다.
curl -XPOST http://localhost:9200/classes/class/1 -H'Content-Type: application/json' -d@new_class.json
{
"title": "Machine Learning",
"Professor": "Minsuk Heo",
"major": "Computer Science",
"semester": ["spring", "fall"],
"student_count": 100,
"unit": 3,
"rating": 5
}
new_class.json 파일에는 위 내용이 들어있으며, 이를 등록한 것을 위 이미지에서 볼 수 있다.
POST 로 Update를 좀 더 알아보자.
POST로 Document가 등록되어 있을 때, 이것을 어떻게 Update할 수 있을까?
앞서, 실습했던 내용들을 DELETE하고 다시 하나씩 진행해보자.
일단 Update를 진행할 내용을 미리 등록해두었다.
이제 기존 등록된 내용을 그대로 두고, 내용을 추가할 것이다.
curl -XPOST http://localhost:9200/classes/class/1/_update -H'Content-Type: application/json' -d '{"doc": {"unit" :1}}'
{
"_index" : "classes",
"_type" : "class",
"_id" : "1",
"_version" : 2,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"title" : "Algorithm",
"professor" : "John",
"unit" : 1
}
}
위 명령어를 통해 unit이라는 것이 1로 등록된 것을 볼 수 있다. 만약, 다시 2로 수정하고 싶으면 아래 명령어를 그대로 쓰면 된다.
curl -XPOST http://localhost:9200/classes/class/1/_update -H'Content-Type: application/json' -d '{"doc": {"unit" :2}}'
또한, 현재 내용에서 값을 추가하고 싶을 때는 다음과 같이 코드처럼 쓸 수도 있다.
curl -XPOST http://localhost:9200/classes/class/1/_update -H'Content-Type: application/json' -d '{"script":"ctx._source.unit += 5"}'
{"script":"ctx._source.unit += 5"}
위 수식을 통해, 현재 unit에 들어 있는 값에 +5 를 진행한 예제이다.
POST 로 BULK 데이터를 올려보자.
먼저, 명령어는 다음과 같다.
curl -XPOST http://localhost:9200/_bulk?pretty -H'Content-Type: application/json' --data-binary @classes.json
위 명령어에서 classes.json에는 bulk 데이터가 다음과 같이 들어있다.
{ "index" : { "_index" : "classes", "_type" : "class", "_id" : "1" } } {"title" : "Machine Learning","Professor" : "Minsuk Heo","major" : "Computer Science","semester" : ["spring", "fall"],"student_count" : 100,"unit" : 3,"rating" : 5, "submit_date" : "2016-01-02", "school_location" : {"lat" : 36.00, "lon" : -120.00}}
한개 예시만 보면, index이름, id등을 지정하고, 거기에 들어갈 document 내용들이 들어가게 된다.
그 결과 위와 같이, 정상적으로 삽입이 된 것을 확인할 수 있다.
그럼 다음 포스팅부터는 RDB에서 SCHEMA에 해당하는 Mapping에 대해 알아보도록 하겠다.
※ Inflearn 강의, Naver D2 블로그 등을 참고해 정리한 내용입니다.
1편 > Elastic Stack 아주 조금만 알아보자 - Elastic Stack 이란?
2편 > 현재 Post
3편 > Elastic Stack 아주 조금만 알아보자 - ElasticSearch Mapping/Search
4편 > Elastic Stack 아주 조금만 알아보자 - ElasticSearch 구조
5편 > Elastic Stack 아주 조금만 알아보자 - Aggregation
6편 > Elastic Stack 아주 조금만 알아보자 - Kibana
'Architecture > ELK' 카테고리의 다른 글
Elastic Stack 아주 조금만 알아보자 - Kibana (0) | 2019.12.05 |
---|---|
Elastic Stack 아주 조금만 알아보자 - Aggregation (0) | 2019.12.04 |
Elastic Stack 아주 조금만 알아보자 - ElasticSearch 구조 (0) | 2019.11.28 |
Elastic Stack 아주 조금만 알아보자 - ElasticSearch Mapping/Search (0) | 2019.11.27 |
Elastic Stack 아주 조금만 알아보자 - Elastic Stack 이란? (0) | 2019.11.12 |