程序中大多的實體或對象可以被序列化爲包含鍵值對的JSON對象,鍵(key)是字段(field)或屬性(property)的名字,值(value)能夠是字符串、數字、布爾類型、另外一個對象、值數組或者其餘特殊類型,好比表示日期的字符串或者表示地理位置的對象。web
{ "name": "John Smith", "age": 42, "confirmed": true, "join_date": "2014-06-01", "home": { "lat": 51.5, "lon": 0.1 }, "accounts": [ { "type": "facebook", "id": "johnsmith" }, { "type": "twitter", "id": "johnsmith" } ] }
一般,咱們能夠認爲對象(object)和文檔(document)是等價相通的。不過,他們仍是有所差異:對象(Object)是一個JSON結構體——相似於哈希、hashmap、字典或者關聯數組;對象(Object)中還可能包含其餘對象(Object)。 在Elasticsearch中,文檔(document)這個術語有着特殊含義。它特指最頂層結構或者根對象(root object)序列化成的JSON數據(以惟一ID標識並存儲於Elasticsearch中)。數據庫
一個文檔不僅有數據。它還包含了元數據(metadata)——關於文檔的信息。三個必須的元數據節點是:數組
節點 | 說明 |
---|---|
_index |
文檔存儲的地方 |
_type |
文檔表明的對象的類 |
_id |
文檔的惟一標識 |
_index
索引(index)相似於關係型數據庫裏的「數據庫」——它是咱們存儲和索引關聯數據的地方。數據結構
提示:app
事實上,咱們的數據被存儲和索引在分片(shards)中,索引只是一個把一個或多個分片分組在一塊兒的邏輯空間。然而,這只是一些內部細節——咱們的程序徹底不用關心分片。對於咱們的程序而言,文檔存儲在索引(index)中。剩下的細節由Elasticsearch關心既可。spa
咱們將會在《索引管理》章節中探討如何建立並管理索引,但如今,咱們將讓Elasticsearch爲咱們建立索引。咱們惟一須要作的僅僅是選擇一個索引名。這個名字必須是所有小寫,不能如下劃線開頭,不能包含逗號。讓咱們使用website
作爲索引名。code
_type
在應用中,咱們使用對象表示一些「事物」,例如一個用戶、一篇博客、一個評論,或者一封郵件。每一個對象都屬於一個類(class),這個類定義了屬性或與對象關聯的數據。user
類的對象可能包含姓名、性別、年齡和Email地址。對象
在關係型數據庫中,咱們常常將相同類的對象存儲在一個表裏,由於它們有着相同的結構。同理,在Elasticsearch中,咱們使用相同類型(type)的文檔表示相同的「事物」,由於他們的數據結構也是相同的。blog
每一個類型(type)都有本身的映射(mapping)或者結構定義,就像傳統數據庫表中的列同樣。全部類型下的文檔被存儲在同一個索引下,可是類型的映射(mapping)會告訴Elasticsearch不一樣的文檔如何被索引。 咱們將會在《映射》章節探討如何定義和管理映射,可是如今咱們將依賴Elasticsearch去自動處理數據結構。索引
_type
的名字能夠是大寫或小寫,不能包含下劃線或逗號。咱們將使用blog
作爲類型名。
_id
id僅僅是一個字符串,它與_index
和_type
組合時,就能夠在Elasticsearch中惟一標識一個文檔。當建立一個文檔,你能夠自定義_id
,也可讓Elasticsearch幫你自動生成。
還有一些其它的元數據,咱們將在《映射》章節探討。使用上面提到的元素,咱們已經能夠在Elasticsearch中存儲文檔並經過ID檢索——換言說,把Elasticsearch作爲文檔存儲器使用了。