> For the complete documentation index, see [llms.txt](https://hezhiqiang.gitbook.io/elasticsearch/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hezhiqiang.gitbook.io/elasticsearch/data/document.md).

# 文档

在很多程序中，大部分实体或者对象都被序列化为包含键和值的JSON对象。**键**是一个**字段**或者**属性**的名字，**值**可以是一个字符串、数字、布尔值、对象、数组或者是其他的特殊类型，比如代表日期的字符串或者代表地理位置的对象：

```javascript
{
    "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 )仅仅是一个JSON对象,类似于哈希，哈希映射，字典或关联数组。对象(Objects)则可以包含其他对象(Objects)。

在Elasticsearch中，**文档**这个单词有特殊的含义。它指的是在Elasticsearch中被存储到唯一ID下的由最高级或者*根对象 (root object )*&#x5E8F;列化而来的JSON。

## 文档元数据

一个文档不只包含了数据。它还包含了*元数据(metadata)* —— **关于**文档的信息。有三个元数据元素是必须存在的，它们是：

| 名字       | 说明        |
| -------- | --------- |
| `_index` | 文档存储的地方   |
| `_type`  | 文档代表的对象种类 |
| `_id`    | 文档的唯一编号   |

## `_index`

*索引* 类似于传统数据库中的"数据库"——也就是我们存储并且索引相关数据的地方。

> #### TIP：

在Elasticsearch中，我们的数据都在*分片*中被存储以及索引，索引只是一个逻辑命名空间，它可以将一个或多个分片组合在一起。然而，这只是一个内部的运作原理——我们的程序可以根本不用关心分片。对于我们的程序来说，我们的文档存储在索引中。剩下的交给Elasticsearch就可以了。

我们将会在《索引管理》章节中探讨如何创建并管理索引。但是现在，我们只需要让Elasticsearch帮助我们创建索引。我们只需要选择一个索引的名字。这个名称必须要全部小写，也不能以下划线开头，不能包含逗号。我们可以用`website`作为我们索引的名字。

## `_type`

在程序中，我们使用对象代表“物品”，比如一个用户、一篇博文、一条留言或者一个邮件。每一个对象都属于一种*类型*，类型定义了对象的属性或者与数据的关联。**用户**类的对象可能就会包含名字、性别、年龄以及邮箱地址等。

在传统的数据库中，我们总是将同类的数据存储在同一个表中，因为它们的数据格式是相同的。同理，在Elasticsearch中，我们使用同样*类型*的文档来代表同类“事物”，也是因为它们的数据结构是相同的。

每一个*类型*都拥有自己的映射(mapping)或者结构定义，它们定义了当前类型下的数据结构，类似于数据库表中的列。所有类型下的文档会被存储在同一个索引下，但是*映射*会告诉Elasticsearch不同的数据应该如何被索引。

我们将会在《映射》中探讨如何制定或者管理映射，但是目前为止，我们只需要依靠Elasticsearch来自动处理数据结构。

## `_id`

*id*是一个字符串，当它与`_index`以及`_type`组合时，就可以来代表Elasticsearch中一个特定的文档。我们创建了一个新的文档时，你可以自己提供一个`_id`，或者也可以让Elasticsearch帮你生成一个。

### 其他元数据

在文档中还有一些其他的元数据，我们将会在《映射》章节中详细讲解。使用上面罗列的元素，我们已经可以在Elasticsearch中存储文档或者通过ID来搜索已经保存的文档了。
