程序中大多的实体或对象可以被序列化为包含键值对的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作为文档存储器使用了。