Mapping 이란
Mapping은 RDB에서 Schema와 비슷한 역할을 한다.
그러나, 항상 Mapping이 필요한가를 묻는다면, 앞선 포스트에서 진행했듯, 딱히 신경쓰지 않아도 Document 생성/삭제/수정 등이 자유롭다.
그러나, Mapping이 정확하지 않으면 우리가 원하는 데이터의 정합성이 떨어지게 된다. (숫자가 String 으로 저장되는 등)
따라서, Kibana를 이용한다는 등 분석 및 Visualize를 해야할 때 제대로 사용하기 위해서는 꼭 넣어주는 것이 좋다.
{
"class" : {
"properties" : {
"title" : { "type" : "text" },
"professor" : { "type" : "text" },
"major" : { "type" : "text" },
"semester" : { "type" : "text" },
"student_count" : { "type" : "integer" },
"unit" : { "type" : "integer" },
"rating" : { "type" : "integer" },
"submit_date" : { "type" : "date", "format" : "yyyy-MM-dd"
},
"school_location" : { "type" : "geo_point" }
}
}
}
위 내용을 보면, class라는 Type이 있고 (RDB의 Table에 해당), properties 안에 각각 type들이 들어 있다.
그럼 간단히 실습해보자.
위에서 보면, PUT으로 index 먼저 만들어 주었고, GET으로 확인하였다.
여기서 주의깊게 볼 내용은 mappings에 값이 비어 있다는 것이다.
curl -H 'Content-Type:application/json' -XPUT 'http://localhost:9200/classes/class/_mapping?include_type_name=true&pretty' -d @classesRating_mapping.json
파라미터가 조금 늘어 났는데, 이는 아래 링크를 확인하자.
https://www.inflearn.com/questions/12385
그럼 내가 등록하고자 했던 내용들이, Mappings에 등록되었다는 것을 알 수 있다.
그럼 앞선 포스팅에서 진행했던 bulk 데이터를 넣고 확인해보자.
Search
Search 기능에 대해 알아보자.
먼저 데이터를 가져와 삽입해보자.
{ "index" : { "_index" : "basketball", "_type" : "record", "_id" : "1" } }
{"team" : "Chicago Bulls","name" : "Michael Jordan", "points" : 30,"rebounds" : 3,"assists" : 4, "submit_date" : "1996-10-11"}
{ "index" : { "_index" : "basketball", "_type" : "record", "_id" : "2" } }
{"team" : "Chicago Bulls","name" : "Michael Jordan","points" : 20,"rebounds" : 5,"assists" : 8, "submit_date" : "1996-10-11"}
그리고 위 데이터를 bulk로 넣어준다.
curl -XPOST http://localhost:9200/_bulk?pretty -H'Content-Type: application/json' --data-binary @simple_basketball.json
그럼 간단히 Search를 해보자.
curl -XGET localhost:9200/basketball/record/_search?pretty
{
"took" : 27,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "basketball",
"_type" : "record",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"team" : "Chicago Bulls",
"name" : "Michael Jordan",
"points" : 30,
"rebounds" : 3,
"assists" : 4,
"submit_date" : "1996-10-11"
}
},
{
"_index" : "basketball",
"_type" : "record",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"team" : "Chicago Bulls",
"name" : "Michael Jordan",
"points" : 20,
"rebounds" : 5,
"assists" : 8,
"submit_date" : "1996-10-11"
}
}
]
}
}
위와 같이, 2개의 Document가 찾아지는 것을 볼 수 있다.
그럼, 이중 points가 30인 것만 찾아보자.
curl -XGET 'localhost:9200/basketball/record/_search?q=points:30&pretty'
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "basketball",
"_type" : "record",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"team" : "Chicago Bulls",
"name" : "Michael Jordan",
"points" : 30,
"rebounds" : 3,
"assists" : 4,
"submit_date" : "1996-10-11"
}
}
]
}
}
위와 같은 방법도 있지만, Request Body를 사용하는 방법이 있다.
curl -XGET -H'Content-Type: application/json' localhost:9200/basketball/record/_search?pretty -d'
{
"query" : {
"term": { "points" : 30}
}
}'
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "basketball",
"_type" : "record",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"team" : "Chicago Bulls",
"name" : "Michael Jordan",
"points" : 30,
"rebounds" : 3,
"assists" : 4,
"submit_date" : "1996-10-11"
}
}
]
}
}
위와 같이 request body의 경우 더 여러가지 옵션들이 있다.
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html
위 URL에 다양한 방법이 있다는 것이 나온다.
다만, 위 API를 이해할 때 Shard, Node등의 단어들이 나온다.
다음 포스팅에서는 위 API를 이해하기 위해 새로운 단어들을 학습해 보도록 하자.
※ Inflearn 강의, Naver D2 블로그 등을 참고해 정리한 내용입니다.
1편 > Elastic Stack 아주 조금만 알아보자 - Elastic Stack 이란?
2편 > Elastic Stack 아주 조금만 알아보자 - ElasticSearch 기본 실습
3편 > 현재 Post
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 기본 실습 (0) | 2019.11.20 |
Elastic Stack 아주 조금만 알아보자 - Elastic Stack 이란? (0) | 2019.11.12 |