您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何進行Elasticsearch Mapping類型映射概述與元字段分析,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
小編對ES類型映射機制進行詳細解讀。
Mapping,映射,相當于關系型數據庫創建語句,定義文檔字段及其類型、索引與存儲方式。通常會涉及如下方面:
文檔中哪些字段需要定義成全文索引字段。
文檔中哪些字段定義為精確值,例如日期,數字、地理位置等。
文檔中哪些字段需要被索引(能通過該字段的值查詢文檔)。
日期值的格式。
動態添加字段的規則定義等。
Elasticsearch支持meta-fields、fields or properties兩種映射類型,將決定文檔的索引方式。
Meta-fields
元數據字段用于定義文檔的元數據字段的特征,文檔的元數據字段主要包括_index、_type、_id、_sour
ce這4個字段。
Fields or properties
屬性字段列表,通過properties字段定義整個文檔有效載荷的各字段的數據類型、分詞器等屬性。
映射類型,可以理解為以何種方式來定義索引中一個類型的字段集。
每一個字段都會指定一個數據類型,數據類型通常如下:
簡單類型,例如text、keyword、d
ate、long、double、boolean、ip。
復合類型,諸如object(json)、nets
ed.
特殊類型,諸如geo_point、geo_s
hape(地圖相關類型)、completion。
后續章節會單獨重點剖析elasticsearch所支持的數據類型。
es提供如下參數來限制es的行為:
index.mapping.total_fields.limit
索引中允許定義的最大字段(屬性)個數,默認為1000。
index.mapping.depth.limit
字段級聯的最大深度,默認為20。
index.mapping.nested_fields.limit
一個索引最多包含字段類型為nest
ed的個數,默認為50。
與關系型數據庫不同的是,一個type(對應關系型數據庫的表)中的字段可以在使用過程中動態添加。具體的動態映射機制,將在后續文章中單獨結束。
Elasticsearch不支持直接修改已索引的已存在的字段映射,因為修改字段映射,意味著已索引的數據生效,可以使用別名機制來修改字段的名稱,如果需要修改已存在字段的映射,建議重新創建一個索引,再使用reindex API遷移數據。
索引在創建時,Elasticsearch7.x版本只支持一個映射類型,而7.x版本后將完成刪除映射類型。5.x中一個索引包含多個type的情況再6.x版本將繼續支持查詢。7.0版本后,API將完成移除與多類型相關的API。
Elasticsearch7.x版本后為什么不繼續對單一索引庫提供多類型支持呢?
當初,為了方便理解es,通常與關系型數據庫進行類比,例如es中的index相當于關系型數據庫的database,而類型相當于關系型數據庫中的table。其實這是一個錯誤的比喻。在關系型數據庫中,表是相互獨立的,一個表中的列名與另外一個表中的列名相同是沒有關系的,但對于es的類型映射定義,情況并非如此。
在es單一索引中,不同映射類型(type)具有相同名稱的字段在內部都是由同一個Lucence字段來存儲,這也就意味著同一個索引內不同的類型,如果出現名字相同的字段,其數據類型也必須相同。更重要的是,存儲在同一索引中具有很少或沒有共同字段的不同類型(實體)會導致數據稀疏,大大降低Lucece高效壓縮文檔的能力,影響其檢索性能。
基于上述各種原因,故es將在后續版本中不支持一個索引中定義多個類型。
每個文檔都有與之關聯的元數據,例如_index、mapping _type和_id元字段。
在創建映射類型時,可以定制其中一些元字段的行為。
表明文檔身份的元字段。
_index
文檔所在的索引,類似于關系型數據庫的database。
_uid
_type與_id的組合,文檔的唯一標識。
_type
文檔映射類型。
_id
文檔的_id值。
_source
文檔的原始json數據。
_size
文檔_souce字段的字節長度,需要插件:mapper-size plugin。
_all
將所有字段映射成一個_all字段,在6.0.0版本后廢棄,可以使用copy_to來定義需要聚合的字段。
_field_names
_field_names字段,用于索引文檔中包含除null之外的任何值的每個字段的名稱。exist查詢使用這個字段來查找對于特定字段具有或不具有任何非空值的文檔,也就是該字段記錄的是字段值不為null的所有字段名稱。當前版本,_field_names字段不包含啟用了doc_values、norm的字段,對于啟用doc_values或norm的字段,exist查詢仍然可用,但不會使用_field_names字段。
注:禁用_field_names通常是不必要的,因為它不再承載以前的索引開銷。如果你有很多禁用doc_value和norm的字段,并且你不需要使用這些字段執行exist查詢,你可能想禁用_field_names,你可以通過如下方式禁用_field_names字段:
1PUT tweets
2{
3 "mappings": {
4 "_doc": {
5 "_field_names": {
6 "enabled": false
7 }
8 }
9 }
10} }
_ignored
設置為ignore_malformed=true的所有字段。
_routing
分片路由字段。
_meta
用于用戶自定義的元數據,例如:
1PUT my_index
2{
3 "mappings": {
4 "_doc": {
5 "_meta": {
6 "class": "MyApp::User",
7 "version": {
8 "min": "1.0",
9 "max": "1.3"
10 }
11 }
12 }
13 }
14} }
以上就是如何進行Elasticsearch Mapping類型映射概述與元字段分析,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。