1. 什麼是meta-fields
在Elasticsearch下,一個文檔除了有數據之外,它還包含了元數據(Metadata)。每創建一條數據時,都會對元數據進行寫入等操作,當然有些元數據是在創建mapping的時候就會設置,
它裡面定義了每個添加的doc的處理方式。 類似於數據庫的表結構數據。
2. 有哪些meta-fields
ES中元數據大體分為五中類型:身份元數據、索引元數據、文檔元數據、路由元數據以及其他類型的元數據
2.1. 身份元數據
_index:文檔所屬索引 , 自動被索引,可被查詢,聚合,排序使用,或者腳本里訪問
_type:文檔所屬類型,自動被索引,可被查詢,聚合,排序使用,或者腳本里訪問
_id:文檔的唯一標識,
建索引時候傳入 ,不被索引, 可通過_uid被查詢,腳本里使用,不能參與聚合或排序
_uid:由_type和_id字段組成,自動被索引 ,可被查詢,聚合,排序使用,或者腳本里訪問
2.2. 索引元數據
_all: 自動組合所有的字段值,以空格分割,可以指定分器詞索引,但是整個值不被存儲,所以此字段僅僅能被搜索,不能獲取到具體的值
_field_names:索引了每個字段的名字,可以包含null值,可以通過exists查詢或missing查詢方法來校驗特定的字段
_timestamp:可以手工指定時間戳值,也可以自動生成使用now()函數,除此之外還可以設置日期的格式化,忽略確實等功能
_ttl:對於一些會話數據或者驗證碼失效時間,一般來說是有生命週期的,在es中可以很方便的通過這個ttl來設置存活時間,比如1小時,或者10分鐘,在超時過後,這個doc會被自動刪除,這種方式並不適合按周或按天刪除歷史數據,如果是這種需求,可考慮使用索引級別的管理方式
2.3. 文檔元數據
_source : 一個doc的原生的json數據,不會被索引,用於獲取提取字段值 ,啟動此字段,索引體積會變大,如果既想使用此字段
又想兼顧索引體積,可以開啟索引壓縮
https://www.elastic.co/guide/en/elasticsearch/reference/2.3/index-modules.html#index-codec
_size: 整個_source字段的字節數大小,需要單獨安裝一個插件才能展示,詳情參見:https://www.elastic.co/guide/en/elasticsearch/plugins/5.4/mapper-size.html
_source是可以被禁用的,不過禁用之後部分功能再支持:
update api:https://www.elastic.co/guide/en/elasticsearch/reference/2.3/docs-update.html
highlighting:https://www.elastic.co/guide/en/elasticsearch/reference/2.3/search-request-highlighting.html
索引重建、修改mapping以及分詞、索引升級
debug查詢或者聚合語句
-
索引自動修復
2.4. 路由元數據
_parent:在同一個索引中,可以通過_parent字段來給兩個不同mapping type的數據建立父子關係,在查詢時可以通過has_child, has_parent等查詢,來聚合join數據,需要注意的是,父子type必須不能是一樣的,否則會識別失敗。
_routing: 一個doc可以被路由到指定的shard上,通過下面的規則:
shard_num = hash(_routing) % num_primary_shards
默認情況下,會使用doc的_id字段來參與路由規則,如果此doc有父子關係,則會以父親的_id作為路由規則,以確保父子數據 必須處於同一個shard上,以提高join效率
需要注意的是如果指定了使用自己的路由規則,如果兩個文檔_id參數一樣,但是路由規則值不一樣,有可能造成這兩條數據被分發到不同的shard,所以在使用自己的路由規則時
注意_id參數的唯一性。
2.5. 其他
_meta:每個mapping type可以有不同的元數據類型,我們可以存儲自己定義認為的元數據中,此字段支持查詢和更新
https://www.elastic.co/guide/en/elasticsearch/reference/2.3/mapping-fields.html
http://m635674608.iteye.com/blog/2259528
http://www.111cn.net/jsp/J2EE-EJB/118565.htm
個人介紹:
高廣超:多年一線互聯網研發與架構設計經驗,擅長設計與落地高可用、高性能、可擴展的互聯網架構。
本文首發在 高廣超的簡書博客 轉載請註明!
閱讀更多 互聯網技術棧 的文章