Elasticsearch之元數據(meta-fields)介紹

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是可以被禁用的,不過禁用之後部分功能再支持:

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可以有不同的元數據類型,我們可以存儲自己定義認爲的元數據中,此字段支持查詢和更新

3. 參考資料

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


個人介紹: 高廣超:多年一線互聯網研發與架構設計經驗,擅長設計與落地高可用、高性能、可擴展的互聯網架構。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章