데이터 처리/ELK
[Elastic Search] Mapping
부리부리부리부리
2022. 12. 6. 19:16
Mapping은 관계형 데이터베이스에서의 Schema와 동일하다.
Mapping없이도 ES에 데이터를 넣을 수 있지만 실무에선 상당히 위험한 일이다.
사실 RDBMS에서도 스키마없이 데이터를 관리한다는건.. 음 상상이 잘 안간다.
ES에 데이터를 넣어놓고, Kibana로 시각화를 할 때 날짜 타입을 기준으로 평균을 낸다든지, 숫자 타입의 평균을 낸다든지 할때 등등 Mapping이 필요하다.
데이터가 이미 들어가있어도 Mapping을 추가할 수 있다.
강의에서 사용하는 JSON파일을 이용하여 XPUT을 통해 매핑을 추가하려는데 자꾸 에러가 나서 찾아보니,
Elastic Search에서는 mapping 타입 중 string을 삭제하고 text로 바꾸었다고 한다.
인프런 강의를 들으시는 분들이라면
classesRating_mapping.json 파일을 열어서 string을 text로 바꾸시길!
이제 다음과 같이 시도해보자.
$ curl -XPUT 'http://localhost:9200/classes/class/_mapping?include_type_name=true' --header 'content-type: application/json' -d @classesRating_mapping.json
별 에러없이 잘 실행되었기 때문에 바로 결과를 확인해보자.
$ curl -XGET 'http://localhost:9200/classes?pretty' // 입력
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1164 100 1164 0 0 447k 0 --:--:-- --:--:-- --:--:-- 568k{
"classes" : {
"aliases" : { },
"mappings" : {
"properties" : {
"major" : {
"type" : "text"
},
"professor" : {
"type" : "text"
},
"rating" : {
"type" : "integer"
},
"school_location" : {
"type" : "geo_point"
},
"semester" : {
"type" : "text"
},
"student_count" : {
"type" : "integer"
},
"submit_date" : {
"type" : "date",
"format" : "yyyy-MM-dd"
},
"title" : {
"type" : "text"
},
"unit" : {
"type" : "integer"
}
}
},
"settings" : {
"index" : {
"routing" : {
"allocation" : {
"include" : {
"_tier_preference" : "data_content"
}
}
},
"number_of_shards" : "1",
"provided_name" : "classes",
"creation_date" : "1670321330267",
"number_of_replicas" : "1",
"uuid" : "jdgDF6fbSWawXYjp-hrmUQ",
"version" : {
"created" : "7100299"
}
}
}
}
}
분명 Elastic Search는 DB 역할이라고 생각했는데 지금까지 공부해오며 왜 스키마 정의를 해주지않는지에 대한 의문을 가지지 않았다. 갈 길이 멀다.