12.29 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 : 一個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


個人介紹:

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

本文首發在 高廣超的簡書博客 轉載請註明!


分享到:


相關文章: