冠縣做網(wǎng)站推廣3d建模培訓(xùn)學(xué)校哪家好
Elasticsearch的Mapping
Mapping是什么
- Mapping定義了ES的索引結(jié)構(gòu)、字段類型、分詞器等,是索引的一部分。
- 類似于關(guān)系型數(shù)據(jù)庫中“表結(jié)構(gòu)”的概念,在 Mapping 里也包含了一些屬性,比如字段名稱、類型、字段使用的分詞器、是否評分、是否創(chuàng)建索引等屬性
查看索引Mapping
- 查看索引完整mapping: get /my_index/_mappings
- 查看索引指定字段的mapping: get /my_index/_mappings/field/xxx
字段數(shù)據(jù)類型(常用)
- 數(shù)字類型:long、integer、short、byte、double、float
- 基本數(shù)據(jù)類型:boolean、alias
- keywords類型:
- keyword:用于索引結(jié)構(gòu)化字段,可用于過濾、排序、聚合,keyword類型只能通過精確值搜索到,比如ID、姓名等
- wildcrd:可以針對類似grep的,用于模糊查詢
- 時(shí)間類型:date、data_nanos
- 對象類型:
- object:非基本類型之外,默認(rèn)的json對象為Object
- flattened:單映射對象類型、其值為json對象
- nested:嵌套類型
- join:父子關(guān)系類型
- 空間數(shù)據(jù)類型:
- geo_point:空間中的點(diǎn),比如經(jīng)緯度
- geo_shape:復(fù)雜型狀,比如多邊形
- 文本搜索類型:
- text:文本類型,適用于全文檢索
- completion:用于自動(dòng)補(bǔ)全,即搜索推薦
映射類型(兩種)
自動(dòng)映射-Dynamic Field Mapping(不推薦使用)
es在增加數(shù)據(jù)的時(shí)候如果沒有指定字段的類型,es會自動(dòng)分配類型
- 如果是true或false默認(rèn)boolean
- 如果是小數(shù)默認(rèn)float
- 如果是數(shù)字默認(rèn)long
- 如果是object默認(rèn)object
- 如果數(shù)組取決于數(shù)組中第一個(gè)非空元素類型
- 如果是日期格式字符串默認(rèn)date
- 如果是數(shù)字類型字符串默認(rèn)float或long
- 如果其它字符串默認(rèn)text+keyword
顯示映射-Expllcit Field Mapping
在創(chuàng)建Mapping時(shí)候,手動(dòng)創(chuàng)建類型
例子:
PUT my_index
{"mappings": {"properties": {"name": {"type": "text"},"age": {"type": "integer"}}}
}
映射參數(shù)
映射參數(shù)就是在創(chuàng)建索引時(shí)候的mapping中可以配置什么參數(shù),分別代表什么含義
- index:表示對當(dāng)前自動(dòng)創(chuàng)建倒排索引,默認(rèn)true,如果不創(chuàng)建索引,則不可以通過當(dāng)前字段作為搜索條件
- analyzer:指定分詞器,只可以對可以分詞的字段類型使用
- boots:對當(dāng)前字段相關(guān)度評分權(quán)重,默認(rèn)1
- coerce:是否允許強(qiáng)制類型轉(zhuǎn)換
- copy_to:用于將其它字段拼接后存儲到當(dāng)前字段中
- doc_value:默認(rèn)為true,可以提高排序和聚合的效率
- dynamic:控制是否可以動(dòng)態(tài)添加新的字段
- strict:如果檢測到新字段,會引發(fā)異常并拒絕文檔,必須將新字段顯示的添加到mapping中
- eager_global_ordinals:用于聚合字段,提示聚合性能,
- enabled:是否創(chuàng)建倒排索引,可以作用于mapping也可以作用于field上
- fielddata:查詢時(shí)內(nèi)存數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中存儲,設(shè)置字段為filedata會給該字段創(chuàng)建倒排索引并放到內(nèi)存中。
- field:當(dāng)前字段的子字段
- format:定義日期格式
- ignore_above:超過長度的內(nèi)容被忽略,不被存儲
- ignore_malformed:忽略類型錯(cuò)誤
- index_phrases:提升exact_value查詢速度
- index_prefixes:前綴檢索,有兩個(gè)屬性
- min_chars:前綴最小長度,默認(rèn)2
- max_chars:前綴最大長度,默認(rèn)5最大20
- meta:添加元數(shù)據(jù)
- norms:是否禁用評分
- null_value:為空值賦值默認(rèn)值
- properties:在mapping中可以配置字段的屬性
- search_analyzer:設(shè)置單獨(dú)的查詢分析器,默認(rèn)和analyzer一致,如果兩者都沒設(shè)置默認(rèn)為”standard"。analyzer針對元數(shù)據(jù),search_analyzer針對搜索的內(nèi)容。
- similarity:為字段設(shè)置相關(guān)度算法
- store:設(shè)置字段是否創(chuàng)建索引
- term_vector:運(yùn)維參數(shù)
映射模板
映射模板用來解決不確定的類型或字段名索引的創(chuàng)建,可以理解為批量處理索引的mapping
例子:給user索引創(chuàng)建兩個(gè)模板,第一個(gè)模板將long類型的屬性默認(rèn)轉(zhuǎn)換為integer類型,第二個(gè)模板將以sum_開頭的字段且不以_text結(jié)尾的字段且為String類型的字段轉(zhuǎn)換為keyword類型
put user3
{"mappings":{"dynamic_templates":[{"long-to-integer":{"match_mapping_type": "long","mapping":{"type": "integer"}}},{"num_and_string":{"match_mapping_type":"string","match":"num_*","unmatch":"*_text","mapping":{"type":"keyword"}}}]}
}
查看索引
{"user3": {"mappings": {"dynamic_templates": [{"long-to-integer": {"match_mapping_type": "long","mapping": {"type": "integer"}}},{"num_and_string": {"match": "num_*","unmatch": "*_text","match_mapping_type": "string","mapping": {"type": "keyword"}}}],"properties": {"age": {"type": "integer"},"firends": {"properties": {"age": {"type": "integer"},"num_test1": {"type": "keyword"}}},"name": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"num_test2": {"type": "keyword"},"num_test2_text": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}
}