# ElasticSearch 맀ν(Mapping)
# μ€μ΅ νκ²½
- π‘ Elasticsearch 7.9.0
- π‘ Windows 10
- π‘ Git Bash
Mapping
μ RDBμμ μ€ν€λ§μ κ°μ κ°λ
μ΄λ€.
μ΄μ ν¬μ€ν
μμ μ΄ν΄λ³Έ κ²μ²λΌ Mapping
μμ΄λ λ°μ΄ν°λ₯Ό λ£κ³ μ½μ μ μμλ€.
νμ§λ§ μ€μ λ‘ μλΉμ€λ₯Ό ν λ Mapping
μ νμ§ μμ κ²½μ° μ¬λ¬ λ¬Έμ κ° λ°μν μ μλ€.
- Documentμ λ μ§λ₯Ό λ£κ³ μΆμλ° λ¨μν ν μ€νΈλ‘ λ€μ΄κ°λ€.
μ κ°μ μν©μ Kibana
λ±μ κ°μν λꡬμ λΆμμ ν λ νμ
μ΄ λ§μ§ μλ λ¬Έμ κ° λνμ μ΄λ€.
μ€μ΅μμ μ¬μ©ν λ°μ΄ν°λ λ€μκ³Ό κ°λ€.
Mapping
μ€μ΅μ νκΈ°μν΄ Indexλ₯Ό λ¨Όμ μμ ν μ΄νμ λ€μ μμ±νκ² λ€.
# 1. Index μμ νκ³ λ€μ λ§λ€κΈ°
# β μμ νκΈ°
$ curl -XDELETE http://localhost:9200/classes?pretty
# β μμ±νκΈ°
$ curl -XPUT http://localhost:9200/classes?pretty
# β νμΈνκΈ°
$ curl -XGET http://localhost:9200/classes?pretty
κ²°κ³Όλ₯Ό 보면 mappings
λΆλΆμ΄ λΉμ΄μλ κ²μ νμΈν μ μλ€.
{
"classes" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index" : {
"creation_date" : "1598314352997",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "vLmOaHZLRMW_7kOZbi0ZRg",
"version" : {
"created" : "7090099"
},
"provided_name" : "classes"
}
}
}
}
# 2. Mapping μμ±νκΈ°
Mapping
μΌλ‘ λ°μ΄ν° νμ
μ 미리 μ§μ ν΄μ£ΌκΈ° μν΄ mapping JSON νμΌμ΄ μμ΄μΌνλ€.
μ°Έκ³ ν κ°μμμλ mapping typeμ
string
μΌλ‘ μ£Όμλλ° μ΄λ 6.x λ²μ λΆν°text
λ‘ λ°λμλ€. μμΈν λ΄μ©μ λ³΄κ³ μΆλ€λ©΄ ν¬μ€ν μ€ Error-handlingμ νμΈνκ±°λ, stackoverflow (opens new window) λ΄μ©μ μ½μ΄λ³Ό κ²μ κΆμ₯νλ€.
{
"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"
}
}
}
}
λ€μκ³Ό κ°μ JSON
νμΌλ‘ mapping μμΌλ³΄μ.
X PUT λͺ λ Ήμ΄λ₯Ό μ¬μ©ν΄ mappingμ μμ±νλ€. λ€μκ³Ό κ°μ΄ μ λ ₯νλ©΄ λλ€.
curl -XPUT 'http://localhost:9200/classes/class/_mapping' -d @classesRating_mapping.json
μ§λ ν¬μ€ν κ³Ό λ§μ°¬κ°μ§λ‘ Windowsμμλ Content-Type μ H μ΅μ μΌλ‘ μ λ ₯ν΄μ€μΌνλ€.
κ·Έλ¦¬κ³ 7.x λ²μ μ 곡μ λ¬Έμ (opens new window)μ λμμλ κ²κ³Ό κ°μ΄ 무νμ APIλ₯Ό μ¬μ©νλ―λ‘ include_type_name=true
λ₯Ό μΆκ°ν΄μ£Όμ΄μΌ νλ€.
$ curl -XPUT 'http://localhost:9200/classes/class/_mapping?include_type_name=true&pretty' -d @classesRating_mapping.json -H 'Content-Type: application/json'
Error μμ΄ μ μμ μΌλ‘ μνλλ€λ©΄ class νμ μ mappingμ΄ μΆκ°λ κ²μ΄λ€.
νμΈν΄λ³΄μ!
$ curl -XGET http://localhost:9200/classes?pretty
κ²°κ³Ό
{
"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" : {
"creation_date" : "1598314352997",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "vLmOaHZLRMW_7kOZbi0ZRg",
"version" : {
"created" : "7090099"
},
"provided_name" : "classes"
}
}
}
}
μ°Έκ³ λ‘ type μ€ geo_point
λ μ§λμ μ€μ μμΉλ₯Ό λμ΄μ€ μ μλ typeμ΄λ€.
# 3. μ€μ λ°μ΄ν°λ₯Ό Indexμ bulkνκΈ°
μ¬λ¬ Document
λ₯Ό bulk
λ‘ νλ²μ λ£μ΄λ³΄μ.
# β Bulk νκΈ°
$ curl -XPOST http://localhost:9200/_bulk?pretty --data-binary @classes.json -H 'Content-Type: application/json'
# β νμΈνκΈ°
$ curl -XGET http://localhost:9200/classes/class/1/?pretty
κ²°κ³Ό
{
"_index" : "classes",
"_type" : "class",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"title" : "Machine Learning",
"Professor" : "YoungJun Park",
"major" : "Computer Science",
"semester" : [
"spring",
"fall"
],
"student_count" : 100,
"unit" : 3,
"rating" : 5,
"submit_date" : "2020-01-02",
"school_location" : {
"lat" : 36.0,
"lon" : -120.0
}
}
}
Mapping typeμ΄ μ μμ μΌλ‘ μ λ ₯λ κ²μ νμΈν μ μλ€!
λ³Έ ν¬μ€ν μ
Inflearn
μ ELK μ€ν (ElasticSearch, Logstash, Kibana) μΌλ‘ λ°μ΄ν° λΆμ (opens new window) κ°μλ₯Ό μ°Έκ³ νμ¬ μμ±λμμ΅λλ€.