Mapping : ESμμ μΈλ±μ± μ, λ¬Έμμ λ°μ΄ν° μ νμ λ°λ₯Έ μ μ ν νμ μ μ§μ νλ κ². μ¬μ μ λ§€νμ νμ§ μμΌλ©΄ ESκ° νμ μλμ§μ . λ¬Έμ λ°μμν€μ§ μκΈ° μν΄ λ§€ν κ³Όμ λ§€μ° μ€μν¨
λμ λ§€ν
- μ¬μ©μκ° λ§€ν νμ μ μ§μ νμ§ μκ³ , ESκ° μλμ§μ .
- 첫λ²μ§Έλ‘ μΈμνΈλλ λ°μ΄ν°μ λ°λΌ νμ μ μ μν¨
- ν λ² μμ±λ λ§€ν νμ μ λ³κ²½ν μ μλ€. νμ λ³κ²½μ μνλ©΄ μΈλ±μ€ μμ ν λ€μ μμ±νκ±°λ λ§€ν λ€μ μ μν΄μΌ νλ€.
- λ¬Έμμ΄μ λΆμν κ²μΈκ°?
- _sourceμ μ΄λ€ νλλ₯Ό μ μν κ²μΈκ°?
- λ μ§ ννΈλ₯Ό κ°μ§λ νλλ 무μμΈκ°?
- λ§€νμ μ μλμ§ μκ³ μ μ λλ νλλ μ΄λ»κ² μ²λ¦¬ν κ²μΈκ°?
PUT movie_search
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1,
},
"mappings": {
"_doc": {
"properties": {
"movieCd": {
"type": "keyword"
},
"movieNm": {
"type": "text",
"analyzer: "standard",
},
"prdtYear": {
"type": "integer"
},
"companies": {
"progerties": {
"companyCd": {
"type": "keyword"
},
"companyNm": {
"type": "keyword"
}
}
}
}
}
}
}
GET movie_search/_mapping
- ν΄λΉ νλ λ°μ΄ν°λ₯Ό ννμ λΆμνκ² λ€.
- text λ°μ΄ν°νμ νλλ analyzer λ§€ν νλΌλ―Έν°λ₯Ό κΈ°λ³Έμ μΌλ‘ μ¬μ©ν΄μΌν¨.
- term queryμ λΆμκΈ°λ₯Ό μ¬μ©νκΈ° μν΄ μ¬μ©
- cafe, Cafe, Cafe` κ° λͺ¨λ κ°μ λ¬Έμλ‘ μΈμλκΈ° μν΄ μ¬μ©
- νλμ κ°μ€μΉ(Weigth) λΆμ
- κ°μ€μΉμ λ°λΌ μ μ¬λ μ μ(_score)κ° λ¬λΌμ§
- μΈλ±μ± μμ μ boost μ€μ νλ©΄ λ€μ indexing νμ§ μλ μ΄μ κ°μ€μΉ λ³κ²½ μλ¨ -> κ²μ μμ μλ§ μ¬μ©!!
- 7.0λ²μ λΆν° boost μ€μ κΈ°λ₯ μ κ±°λ¨
- μΈλ±μ± μ μλ λ³ν νμ© μ¬λΆ μ€μ
- "10"κ³Ό κ°μ νν λ¬Έμμ΄μ΄ integer νλμ λ€μ΄μ¬ λ μλμΌλ‘ νλ³ν.
- coerce λ―Έμ€μ μ μΈλ±μ± μ€ν¨
- λ§€ν νλΌλ―Έν°λ₯Ό μΆκ°ν νλλ₯Ό μ§μ ν νλλ‘ λ³΅μ¬.
- ESκ° ν 곡κ°μ μμ±νλ λ§€λͺ¨λ¦¬ μΊμ
- κ±°μ μ¬μ©νμ§ μμ§λ§, textνμ νλκ° μ λ ¬λμ΄μΌ ν λ..
- λ©λͺ¨λ¦¬ μλͺ¨κ° ν¬κΈ° λλ¬Έμ κΈ°λ³Έμ μΌλ‘ λΉνμ±ν λμ΄μμ
- ESμμ μ¬μ©νλ κΈ°λ³Έ μΊμ
- λ£¨μ¬ κΈ°λ° μΊμ λ°©μ
- νλλ₯Ό μ λ ¬, μ§κ³ν νμ μκ³ μ€ν¬λ¦½νΈμμ νλκ°μ μ‘μΈμ€ ν νμ μμΌλ©΄ λμ€ν¬ κ³΅κ° μ μ½ μν΄ doc_values λΉνμμ€ν
- λ§€ν νλλ₯Ό λμ μΌλ‘ μμ±ν μ§, μμ±νμ§ μμμ§ κ²°μ
- true : μλ‘ μΆκ°λλ νλλ₯Ό λ§€νμ μΆκ°
- false : μλ‘ μΆκ°λλ νλ 무μ. -> μλ‘ μΆκ°λλ νλ κ²μ λΆκ°(μΈλ±μ± μλ¨), _sourceμλ νμλ¨
- strict : μλ‘μ΄ νλ μΆκ°λλ©΄ μμΈ λ°μ, λ¬Έμ μμ²΄κ° μμΈλμ§ μμ. μλ‘ μ μ λλ νλλ μ¬μ©μκ° λ§€νμ λͺ μμ μΌλ‘ μΆκ°ν΄μΌ ν¨
- κ²μ κ²°κ³Όμλ ν¬ν¨νμ§λ§ μμΈμ νμ§ μμ
- λ μ§/μκ°μ λ¬Έμμ΄λ‘ νμ ν¬λ§·
- νλμ μ μ₯λλ λ¬Έμμ΄μ΄ μΌμ ν¬κΈ° λμ΄κ°λ©΄ λΉκ°μΌλ‘ μμΈ
- μλͺ»λ λ°μ΄ν° νμ μΈλ±μ± μ, ν΄λΉ νλλ§ λ¬΄μνκ³ λνλ¨ΌνΈλ μΈλ±μ± κ°λ₯
- νλκ°μ μΈλ±μ±ν μ§ κ²°μ
- κΈ°λ³Έκ° true
- λ€μ€ νλ μ€μ μ΅μ
- νλ μμ λ€λ₯Έ νλ μΆκ° κ°λ₯
PUT my_idx
{
"mappings": {
"_doc": {
"properties": {
"name": {
"type": "text",
"fields": {
"alias": {
"type": "keyword"
}
}
}
}
}
}
}
- _scoreκ° κ³μ°μ νμν μ κ·ν μΈμ μ¬μ© μ¬λΆ.
- κΈ°λ³Έκ° true. λΉνμ±νν΄μ λμ€ν¬ κ³΅κ° μ μ½ κ°λ₯
- λ¬Έμκ° nullμ΄μ΄λ νλ μμ±νκ³ μ μ₯ν¨
- λ°°μ΄ ννμ λ°μ΄ν° μμΈ μ κ²μ μ νλ λμ΄κΈ° μν΄ μ¬μ©
["John Abraham", "Lincon Smith"]κ²μ μ"Abraham Lincon"μΌλ‘ κ²μν΄λ κ²μ κ°λ₯
- Objectνμ or μ€μ²©(Nested)νμ μ€ν€λ§ μ μ μ μ¬μ©
- κ²μ μ μ¬μ©ν λΆμκΈ°λ₯Ό λ³λλ‘ μ§μ
- μ μ¬λ μΈ‘μ μκ³ λ¦¬μ¦ μ§μ
- BM25 : ES λν΄νΈ μ μ¬λ μΈ‘μ μκ³ λ¦¬μ¦
- classic : TF/IDF μκ³ λ¦¬μ¦. μ©μ΄ κ°μλ‘ μ μ¬λ κ³μ°
- boolean : 볡μ‘ν μνμ λͺ¨λΈ μμ΄ λ¨μ boolean μ°μ°μΌλ‘ μ μ¬λ μΈ‘μ
- νλλ₯Ό μ체μ μΌλ‘ μ μ₯ κ°λ₯
- 루μ¬μμ λΆμλ μ©μ΄ μ 보λ₯Ό ν¬ν¨ν μ§ μ¬λΆλ₯Ό 견μ
- no : term vector μ μ₯ x
- yes : νλ, μ©μ΄λ§ μ μ₯
- with_positions : μ©μ΄, μ©μ΄ μμ λ μμΉ μ μ₯
- with_offsets : μ©μ΄, λ¬Έμ μ€νμ μ μ₯
- with_position_offsets : μ©μ΄, μ©μ΄ μμκ³Ό λ, λ¬Έμ μ€νμ λͺ¨λ μ μ₯
μ€μ λ¬Έμμ μ 보λ₯Ό λ΄κ³ μλ _source νλ, κ·Έ λ°μ _index, _type, _id, _scoreμ λ©ννλ
λ¬Έμ μΈλ±μ€ λͺ .
- μΈλ±μ€ λͺ κ³Ό μΈλ±μ€μ λͺ κ° λνλ¨ΌνΈ μλμ§ νμΈ κ°λ₯
ν΄λΉ λνλ¨ΌνΈκ° μν λ§€ν νμ μ 보
- λνλ¨ΌνΈ μλ³ ν€
#νκ·Έλ₯Ό μ¬μ©ν΄ _typeκ³Ό _idκ° μ‘°ν©ν΄ μ¬μ© -> λ΄λΆμ μΌλ‘λ§μ¬μ©. κ²μ μ μ‘°νλλ κ°μ μλ
- λ¬Έμ μλ³Έ λ°μ΄ν°
- μμΈμ μ¬μ©λ λͺ¨λ νλ μ 보 κ°μ§ λ©ν νλ
- λͺ¨λ νλ λ΄μ©μ΄ νλμ ν μ€νΈλ‘ ν©μ³μ Έ μ 곡λ¨
- νΉμ λ¬Έμλ₯Ό μ€λμ μ μ₯νκΈ° μν΄ μ§μ
- keyword, textμ κ°μ λ¬Έμμ΄ νμ
- date, long, double, integer, boolean, ip κ°μ λ°μ΄ν° νμ
- κ°μ²΄, μ€μ²©λ¬Έ λ± JSON κ³μΈ΅ νΉμ±μ λ°μ΄ν° νμ
- geo_point, geo_shape κ°μ νΉμν λ°μ΄ν° νμ
λ³λμ λΆμκΈ°λ₯Ό κ±°μΉμ§ μκ³ μλ¬Έ κ·Έλλ‘ μμΈ.
μ¬μ©λλ νλͺ©
- κ²μ μ νν°λ§ λλ νλͺ©
- μ λ ¬μ΄ νμν νλͺ©
- μ§κ³(aggregation)ν΄μΌ νλ νλͺ©
ex) 'elastic search' κ²μ μ
- 'elastic search'λ‘λ§ κ²μ κ°λ₯
- 'elastic' : κ²μ λΆκ°
Kyword νμ μμ μ€μ κ°λ₯ν μ£Όμ νλΌλ―Έν°
- boost : κ²μ κ²°κ³Ό μ λ ¬μ μν₯
- doc_values : νλλ₯Ό λ©λͺ¨λ¦¬μ λ‘λν΄ μΊμλ‘ μ¬μ©. κΈ°λ³Έκ° true
- index : ν΄λΉ νλλ₯Ό κ²μμ μ¬μ©ν μ§. κΈ°λ³Έκ° true
- null_value : λ°μ΄ν° κ°μ΄ μλ κ²¨μ° nullλ‘ νλ κ° λ체ν μ§ μ€μ (κΈ°λ³Έμ μΌλ‘ κ° μμΌλ©΄ νλ μ체λ₯Ό μμ±νμ§ μμ)
- store : νλκ°μ νλμ λ³λλ‘ _sourceμ μ μ₯νκ³ κ²μ κ°λ₯νκ² ν μ§ μ€μ . κΈ°λ³Έκ° false
λ°μ΄ν°λ₯Ό λ¬Έμμ΄ λ°μ΄ν°λ‘ μΈμ. λΆμκΈ°λ κΈ°λ³Έμ μΌλ‘ Standard Analyzerλ₯Ό μ¬μ©.
textνμ μ κ²μ & μ λ ¬(sorting) & μ§κ³(aggregation)μ μ¬μ©ν΄μΌ ν λ -> λ©ν°νλλ‘ μ€μ
PUT movie_search/_mapping/_doc
{
"properties": {
"movieComment": {
"type": "text",
"fields": {
"movieComment_keyword": {
"type": "keyword"
}
}
}
}
}
text νμ μμ μ€μ κ°λ₯ν μ£Όμ νλΌλ―Έν°
- analyzer : μΈλ±μ€μ κ²μμ μ¬μ©ν ννμ λΆμκΈ° μ€μ
- boost
- fielddata
- index
- norms
- store
- search_analyzer
- simialrity
- term_vector
λ°°μ΄ μ²«λ²μ§Έ κ°μ΄ λ°μ΄ν° νμ κ²°μ . λ°°μ΄μ λͺ¨λ κ°μ΄ κ°μ νμ μΌλ‘ ꡬμ±λμ΄μΌ ν¨
- long : 64λΉνΈ μ μ
- integer : 32λΉνΈ μ μ
- short : 16λΉνΈ μ μ
- byte : 8λΉνΈ μ μ
- double : 64λΉνΈ λΆλ μμμ
- float : 32λΉνΈ λΆλμμμ
- half_float : 16λΉνΈ λΆλ μμμ
λ³λ νμ μ§μ νμ§ μμ μ "yyyy-MM-ddTHH:mm:ssZ" ννλ‘ μ§μ λ¨.
μλ μΈ κ°μ§ νν μ 곡, UTC λ°λ¦¬μ΄ λ¨μ
- λ¬Έμμ΄ ν¬ν¨λ λ μ§ νμ
- ISO_INSTANT ν¬ν¨λ λ μ§ νμ
- λ°λ¦¬μ΄
λ²μκ° μλ λ°μ΄ν°
- integer_range
- float_range
- long_range
- double_range
- date_range
- ip_range
- μκ²½λ μμΉ
IPv4, IPv6 λͺ¨λ μ§μ κ°λ₯
λ΄λΆ κ°μ²΄ κ³μΈ΅μ νν κ°λ₯. νΉμ ν€μλλ‘ λ°μ΄ν° μ μνμ§ μκ³ νλκ°μΌλ‘ λ¬Έμ ꡬ쑰 μ λ ₯
{
"properties": {
"compaies": {
"properties": {
"companyName": {
"type": "text"
}
}
}
}
}
Object κ°μ²΄ λ°°μ΄μ λ 립μ μΌλ‘ μ§μ/μμΈνλ λ°μ΄ν° νμ .
νλ λ΄ κ²μμ κΈ°λ³Έμ μΌλ‘ OR쑰건μΌλ‘ κ²μλ¨.
- OR 쑰건 κ²μμ μ‘°κΈλ§ 볡μ‘ν΄μ Έλ κ²μ λͺ¨νΈν΄μ§.
- Array νμ λ΄λΆ κ²μμ λͺ¨λ λ°μ΄ν°λ₯Ό κΈ°μ€μΌλ‘ ORμ°μ°νκΈ° λλ¬Έμ Array λ΄λΆ λνλ¨ΌνΈ νλκ° μ¦κ°ν μλ‘ νΌλ κ°μ€
{
"title": "ν΄λ¦¬ν¬ν°,
"copanies": [
{
"companyCd": 1,
"companyName": "μλ"
},
{
"companyCd": 2,
"companyName": "heyday"
}
]
}
=> μ΄λ° λ¬Έμ ν΄κ²° μν΄ Nested μ μ!!
PUT movie/_mapping/_doc
{
"properties: {
"compaies": {
"type": "nested"
}
}
}
PUT movie/_doc/8
{
"title": "ν΄λ¦¬ν¬ν°",
"companies: [
{
"companyCd": 1,
"companyName": "μλ"
},
{
"companyCd": 2,
"companyName": "heyday"
}
]
}
POST movie/_search
{
"query": {
"nested": {
"path": "companies",
"query": {
"bool": {
"must": [
{
"match": {"companies.companyName": "μλ"}
},
{
"match": {"companies.companyCd": "2"}
}
]
}
}
}
}
}