ElasticSearch μ λ€μν κΈ°λ₯λ€μ λλ¬λ³΄κΈ° μ κΌ μμμΌ ν νμ
λ€μ λν΄μ μμλ³΄κ² μ΅λλ€.!!
μ§μ§ μ§μ§ μ§μ§ μ€μνλ κΌ μ»€νΌ μ€μ½ λ§μκ³ μ½μ΄μ£ΌμΈμ!!
Mapping μ΄λ»κ² ElasticSearch μ λ¬Έμλ€μ΄ μ μ₯λκ³ μμΈ λμλμ§μ λν μ μμ
λλ€.
μ΄ Mapping μ μ μλ₯Ό ν΅ν΄ λΆνμν νλ‘μΈμ€ λ€κ³Ό κ³΅κ° λλΉλ₯Ό μ€μ΄κ³ νμν κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€.
μλ₯Ό λ€λ©΄,
λν μ΄ν ν¬μ€νΈμμ Dynamic Mapping μ λ€λ£° λμλ Mapping κ³Ό νμ μ λν κΈ°λ³Έ κ°λ μ΄ νμν©λλ€.
λ¨Όμ μ΄λ² ν¬μ€νΈμμλ Metadata Fields κ° μλ Properties μ λν Field Type λ€λ£Ήλλ€.
Metadata Fields λ "_index", "_id", "_source" μ κ°μ΄ metadata μ κ΄λ ¨λ λ μλ€μ λλ€!
λ¨Όμ μ€μν λ μλ€μ λ½μλ©΄,
κ·Έ μΈμ
λ±μ΄ μμ΅λλ€.
λ μμΈν λ΄μ©μ πμλΌμ€ν± ννμ΄μ§ μ°Έκ³ νκΈ°!!
μ λ λ μμ μ λ§ μ€μν©λλ€.
κΈ°λ³Έμ μΌλ‘ μ°λ¦¬κ° μ΄λ€ νλ νμ
μ μ§μ ν΄μ£Όμ§ μκ³ λ¬Έμμ΄ λ°μ΄ν°λ₯Ό λ£κ² λλ©΄ (μ§μ μν΄λ κ°λ₯ν©λλ€.)
ElasticSearch λ μ΄ νλκ° μ΄λ€ μ©λλ‘ μ¬μ©λ μ§ μ λ°©λ²μ΄ μκΈ° λλ¬Έμ keyword μ text νμ
μ κ°μ΄ μ§μ ν΄μ£Όμ΄ μμΈκ³Όμ μ μ§ννκ² λ©λλ€.
keyword μ text μ λ κΈ°λ₯μ΄ λͺ¨λ νμνλ€λ©΄ keyword μ text νμ μ κ°μ΄ μ§μ ν΄μ£Όλ κ²μ΄ μ λ§ μ μ©ν©λλ€.
νμ§λ§ μλ₯Ό λ€μ΄λ΄
μλ€.
λ¬Έμμ μμ±μλ₯Ό κ²μμ νκ³ μΆμ΅λλ€. μμ±μλ₯Ό Email μ΄λΌκ³ ν©μλ€.
μ°λ¦¬κ° κ²μν λ¨μ΄μ Email μ΄ λΉμ·νμ§λ μκ΄κ΄κ³λ₯Ό λ°μ§ νμκ° μμ΅λλ€.
μ€μ§ keyword νμ
μ νλλ§ μμΌλ©΄ λκ² μ£ .
κ·ΈλΌ Email νλμ text νμ
μ λΆνμν νμ
μ΄κ³ , μ΄λ disk 곡κ°μ λλΉνκ² λ©λλ€.
λ§μ½ λ¬Έμκ° μλ°±λ§ μμ²λ§κ°κ° λμ΄κ°λ€λ©΄ μ΄λ 무μν μ μλ 곡κ°μΌ κ² μ
λλ€.
μ΄λ λ°λλ λ§μ°¬κ°μ§ μ λλ€.
νλμ νμν Type λ§ μ§μ νλ κ²μ κ²°κ΅ disk λΉμ©μ μ€μ΄λ κ²°κ³Όλ₯Ό κ°μ Έμ€κ² μ£ ??
λΉμ©μ λ§€μ° μ€μνλκΉ κΌ νμν λ§νΌλ§ μμλ€!!
μ«μ λν μ€μνμ§λ§ μμμΌ ν κ°λ
μ λ§μ§ μμ΅λλ€.
λ§μ½ JSON νμμ λ°μ΄ν°κ° λ λΌμ μ μ₯νλλ° μ μ νμμ΄λ€ κ·Έλ¬λ©΄ Long νμ
μΌλ‘,
μ€μ νμμ΄λ€ κ·Έλ¬λ©΄ Double νμ
μΌλ‘ μλμΌλ‘ 맀νλ©λλ€.
μ μ¬κΈ°μ μ§λ¬Έ. μ Long μ΄κ³ , Double μΌκΉ?
ElasticSearch λ μ§μ λμ§ μμ νμ μ λν΄μ μ λ³΄κ° μμ΅λλ€.
λ€μλ§ν΄ μ μκ° μ μ₯λλ©΄ μ΄ μ μμ λ²μκ° μ΄λ»κ² λ μ§μ λν΄μ μ μ μμ΅λλ€.
κ·Έλ κΈ° λλ¬Έμ Interger κ° μλλΌ λ ν° μλ₯Ό λ΄μ μ μλ Long νμ
μ 맀ννλ κ² μ
λλ€.
Double λν λ§μ°¬κ°μ§ μ
λλ€.
νμ§λ§ 무쑰건 Long, Double νμ
μ μ¬μ©νλ건 μ’μ§ μμ΅λλ€.
μ΄μ μ μ΄λ―Έ λ§νμ§λ§ λΉμ©μ λ§€μ° μ€μν©λλ€. Integer μ λ²μλ©΄ μΆ©λΆνλ° Long μ μ¬μ©νλ κ²μ disk 곡κ°μ λλΉνλ νλμ΄κ² μ£ ?
λ§μ½ μ ννκ² νΉμ νλκ° λ€λ£° μ«μμ λ²μλ₯Ό μλ€λ©΄ κ·Έμ λ§κ² μ¬μ©νμλ κ²μ΄ μ’μ΅λλ€.
JSON νμμ λ°μ΄ν°μλ μ΄ νλλ date νμ
μ΄λ€!! λΌκ³ μλ €μ£Όλ μ§νκ° μμ΅λλ€.
μ°λ¦¬κ° JSON νμμΌλ‘ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μν
λ°.. ElasticSearch λ μ΄κ±Έ μ΄λ»κ² μκΉμ?
ElasticSearch λ λ§€μ° μ μ©ν κΈ°λ₯μ κ°μ§κ³ μμ΅λλ€.
μ΄ νλκ° Date νμ μΈμ§ μλμ§ μ μΆνλ κ²μ΄μ£
λ¬Έμμ΄ νλμ΄λ©°, Date μ 보λ₯Ό ν¬ν¨νκ³ μλ€λ©΄ μλ€λ€μ΄ λ€μκ³Ό κ°μ νμμ΄λΌλ©΄
{ "date": "2015-01-01" }
{ "date": "2015-01-01T12:10:30Z" }
ElasticSearch λ μ!! μ΄ νλλ Date νμ μ΄κ΅¬λ! λΌκ³ μΆλ‘ νκ² λ©λλ€.
λ¬Όλ‘ μ΄ νμμ μλμ κ°μ΄ νμμ μ ν μ μμ΅λλ€.
"mappings": {
"properties": {
"date": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
μμ§ mapping νλ λ²μ λ°°μ°μ§ μμμ§λ§ format νμμ 보면μ μ μ΄λ° μμΌλ‘ μ§μ κ°λ₯νꡬλ λΌκ³ μμλ©΄ λ κ² κ°μ΅λλ€.
λν 미리 μ§μ νλ€λ©΄ Interger, Long νμ μ Date νλλ‘ ννμ΄ κ°λ₯λ ν©λλ€.
JSON μ λ°μ΄ν° νμμ Object λΌκ³ 보μλ©΄ λ©λλ€.
κ³μΈ΅μ μΌλ‘ λ΄λΆ Object λ₯Ό λ€μ ν¬ν¨νκ² λμ£ .
ElasticSearch μμλ μ¬μ€ Object λΌλ νμ μ΄ μ 맀λͺ¨νΈν©λλ€.
μλ₯Ό λ€μ΄
{
"region": "US",
"manager": {
"age": 30,
"name": {
"first": "John",
"last": "Smith"
}
}
}
μ΄λ° λ°μ΄ν°κ° μλ€λ©΄ ElasticSearch λ λ΄λΆμ μΌλ‘
{
"region": "US",
"manager.age": 30,
"manager.name.first": "John",
"manager.name.last": "Smith"
}
μ μ ν΅ν΄ μ μ₯ν©λλ€. λ°λΌμ λ΄λΆμ μΌλ‘ λ³Έλ€λ©΄, "Object λΌλ νμ μ μλ€." λΌκ³ λ ν μ μκ² λ€μ.
Nested νμ
μ λ°°μ΄κ³Ό κ΄λ ¨μ΄ μμ΅λλ€.
λ μμΈνκ² λ§νλ©΄ Object μ λ°°μ΄μ μμΈ νκΈ° μν νΉμ νμ
μ΄λΌκ³ 보μλ©΄ λκ² λ€μ.
μ΄μ μ λ§νλ κ² μ²λΌElasticSearch λ΄λΆμ μΌλ‘λ Object λΌλ νμ μ΄ μλ€. λΌκ³ λ§μλλ Έλλ°μ.
{
"group" : "fans",
"user" : [
{
"first" : "John",
"last" : "Smith"
},
{
"first" : "Alice",
"last" : "White"
}
]
}
μ΄μ κ°μ νμ
μ μ΄λ»κ² μ μ₯λμ΄μΌ ν κΉμ? user.first λ μ¬λ¬κ° μμΌλ λ°°μ΄λ‘ μ μ₯ν΄μΌ ν κ²μ
λλ€.
λ€μκ³Ό κ°μ΄μ.
{
"group" : "fans",
"user.first" : [ "alice", "john" ],
"user.last" : [ "smith", "white" ]
}
μ΄λ κ² μ μ₯λλ©΄ alice white λΌλ μ΄λ¦κ³Ό john smith μ΄λ¦μ μ°κ΄μ±μ μ¬λΌμ§κ² λ©λλ€.
μμν user.first μ "alice", "john" μ΄ μ μ₯λμκ³
λ§μ°¬κΈ°μλ‘ user.last μ "smith", "white" μ΄ μ μ₯λμκΈ° λλ¬Έμ΄μ£ .
λ€μλ§ν΄ smith λΌκ³ κ²μνλ€λ©΄ alice κ° νμ΄λμ¬ μλ μλ μν©μ΄λΌλ κ²λλ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ Nested λΌλ νμ
μ μ§μ ν μ μμ΅λλ€.
Nested λ₯Ό μ¬μ©νκ² λλ©΄ ElasticSearch λ λ°°μ΄μ λ΄λΆμ μΌλ‘ μ¨κ²¨μ§ λ¬Έμμ ν΄λΉ λ΄μ©μ λ°λ‘ μ μ₯νκ² λ©λλ€.
λ§μ½ user κ° 11λͺ μ΄λΌλ©΄, 11κ°μ μ¨κ²¨μ§ user λ¬Έμμ 1κ°μ λ³Έ λ¬Έμκ° μ μ₯λκ² λ€μ.
λ¬Έμκ° λμ΄λλ€λ κ²μ κ²μ λΉμ©μ΄ λμ΄λλ€λ λ§μ
λλ€.
μ μν΄μ μ¨λΌ... μ΄ λ§μ΄μ£ .
λμ΄λΌ μ κ³ νκ°μ§λ§ λ λ§μλ리μλ©΄..
μ΄ Mapping μ ν΅ν΄ λ°μ΄ν° νμ
μ μ νκ³ μΈλ±μ€λ₯Ό λ§λ€μμ΅λλ€.
κ·Έλ¦¬κ³ μμ²λ μμ λ°μ΄ν°λ₯Ό λ§λ€κ³ λλ λ°μ΄ν°μ νμ
μ λ³κ²½ν΄μΌν μν©μ΄ μ€κ² λλ©΄...
μΈλ±μ€λ₯Ό μμ νκ³ λ€μ λ§λλ Reindex κ³Όμ μ΄ νμν©λλ€... κ·Έλ¬λ λ°λμ.. μ¬μ¬μκ³ ν΄μ.. λ§λμΈμ..
μ§μ§μ§ κ³ μ λ§μΌμ ¨μ΅λλ€.!! μ μ λ μ΄λνκ³ μ¬κ³ κ³μΈμ!!
λ€μμλ λ μ΄λ €μ΄ λ΄μ©μΌλ‘ μ°Ύμλ΅κ²μ.. ννꡬ γ γ 곡λΆν μλ‘ μμμΌν λ΄μ©μ΄ λ§μ΅λλ€.