程序中大多的實體或?qū)ο竽軌虮恍蛄谢癁榘I值對的JSON對象,鍵(key)是字段(field)或屬性(property)的名字,值(value)可以是字符串、數(shù)字、布爾類型、另一個對象、值數(shù)組或者其他特殊類型,比如表示日期的字符串或者表示地理位置的對象。
{
"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"
}
]
}
通常,我們可以認(rèn)為對象(object)和文檔(document)是等價相通的。不過,他們還是有所差別:對象(Object)是一個JSON結(jié)構(gòu)體——類似于哈希、hashmap、字典或者關(guān)聯(lián)數(shù)組;對象(Object)中還可能包含其他對象(Object)。 在Elasticsearch中,文檔(document)這個術(shù)語有著特殊含義。它特指最頂層結(jié)構(gòu)或者根對象(root object)序列化成的JSON數(shù)據(jù)(以唯一ID標(biāo)識并存儲于Elasticsearch中)。
一個文檔不只有數(shù)據(jù)。它還包含了元數(shù)據(jù)(metadata)——關(guān)于文檔的信息。三個必須的元數(shù)據(jù)節(jié)點是:
節(jié)點 | 說明 |
---|---|
_index |
文檔存儲的地方 |
_type |
文檔代表的對象的類 |
_id |
文檔的唯一標(biāo)識 |
_index
索引(index)類似于關(guān)系型數(shù)據(jù)庫里的“數(shù)據(jù)庫”——它是我們存儲和索引關(guān)聯(lián)數(shù)據(jù)的地方。
提示:
事實上,我們的數(shù)據(jù)被存儲和索引在分片(shards)中,索引只是一個把一個或多個分片分組在一起的邏輯空間。然而,這只是一些內(nèi)部細(xì)節(jié)——我們的程序完全不用關(guān)心分片。對于我們的程序而言,文檔存儲在索引(index)中。剩下的細(xì)節(jié)由Elasticsearch關(guān)心既可。
我們將會在《索引管理》章節(jié)中探討如何創(chuàng)建并管理索引,但現(xiàn)在,我們將讓Elasticsearch為我們創(chuàng)建索引。我們唯一需要做的僅僅是選擇一個索引名。這個名字必須是全部小寫,不能以下劃線開頭,不能包含逗號。讓我們使用website
做為索引名。
_type
在應(yīng)用中,我們使用對象表示一些“事物”,例如一個用戶、一篇博客、一個評論,或者一封郵件。每個對象都屬于一個類(class),這個類定義了屬性或與對象關(guān)聯(lián)的數(shù)據(jù)。user
類的對象可能包含姓名、性別、年齡和Email地址。
在關(guān)系型數(shù)據(jù)庫中,我們經(jīng)常將相同類的對象存儲在一個表里,因為它們有著相同的結(jié)構(gòu)。同理,在Elasticsearch中,我們使用相同類型(type)的文檔表示相同的“事物”,因為他們的數(shù)據(jù)結(jié)構(gòu)也是相同的。
每個類型(type)都有自己的映射(mapping)或者結(jié)構(gòu)定義,就像傳統(tǒng)數(shù)據(jù)庫表中的列一樣。所有類型下的文檔被存儲在同一個索引下,但是類型的映射(mapping)會告訴Elasticsearch不同的文檔如何被索引。 我們將會在《映射》章節(jié)探討如何定義和管理映射,但是現(xiàn)在我們將依賴Elasticsearch去自動處理數(shù)據(jù)結(jié)構(gòu)。
_type
的名字可以是大寫或小寫,不能包含下劃線或逗號。我們將使用blog
做為類型名。
_id
id僅僅是一個字符串,它與_index
和_type
組合時,就可以在Elasticsearch中唯一標(biāo)識一個文檔。當(dāng)創(chuàng)建一個文檔,你可以自定義_id
,也可以讓Elasticsearch幫你自動生成。
還有一些其它的元數(shù)據(jù),我們將在《映射》章節(jié)探討。使用上面提到的元素,我們已經(jīng)可以在Elasticsearch中存儲文檔并通過ID檢索——換言說,把Elasticsearch做為文檔存儲器使用了。