# Modifying Your Data（修改数据）

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.4/_modifying_your_data.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.4/_modifying_your_data.html)

译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=4260710](http://www.apache.wiki/pages/viewpage.action?pageId=4260710)

贡献者 : [那伊抹微笑](/display/~wangyangting)，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

**Elasticsearch** 提供了近实时的操纵数据和搜索的能力。默认情况下，从您 **index**/**update**/**delete** 数据时到搜索结果中出现会有 **1** 秒的延迟（刷新间隔）。这是从其他平台例如 **SQL** 其中一个事务完成后数据是立即可用的一个重要区别。

### Indexing/Replacing Documents（索引/替换 文档）

我们先前看到过我们是如何索引单个文档的。让我们再次调用该命令 : 

```
curl -XPUT 'localhost:9200/customer/external/1?pretty&pretty' -d'
{
  "name": "John Doe"
}'
```

同样，上面的命令将索引指定的文档到 **customer** 索引，**external** 类型，**ID** 为 **1** 中。如果我们稍候使用不同的（或者相同的）文档来执行上面的命令，**Elasticsearch** 将在已存在的 **ID** 为 **1** 的文档替换（例如，**reindex**）成一个新的文档。

```
curl -XPUT 'localhost:9200/customer/external/1?pretty&pretty' -d'
{
  "name": "Jane Doe"
}'
```

上面将 **ID** 为 **1** 文档的名字从 “**John Doe**” 改成 “**Jane Doe**”。如果，在另一方面，我们使用不同的 **ID**，一个新的文档将会被索引并且已存在的文档仍然在索引中保持不变。

```
curl -XPUT 'localhost:9200/customer/external/2?pretty&pretty' -d'
{
  "name": "Jane Doe"
}'
```

上面将索引一个 **ID** 为 **2** 的新文档。

在索引时，**ID** 是可选项的一部分。如果不指定，**Elasticsearch** 将生产一个随机 **ID**，然后使用它去索引文档。**Elasticsearch** 生成的真实的 **ID**（或者我们在先前的例子中明确的指定）将作为索引 **API** 调用的一部分返回。

该例子演示了在没有明确的 **ID** 的情况下如何去索引一个文档 : 

```
curl -XPOST 'localhost:9200/customer/external?pretty&pretty' -d'
{
  "name": "Jane Doe"
}'
```

注意，在上述的情况下，我们使用了 **POST** 动作，而不是 **PUT**，因为我们没有指定 **ID**。