更新整个document(updating a whole document)

ES中的document是不可变的。如果想要修改一个已经存在的document只有替换他,如下:

PUT /website/blog/123
{
 
"title":"My first blog entry",
 
"text":  "I am starting to get the hang of this...",
 
"date":  "2014/01/02"
}


在响应里,可以看到,_version已经增加了,返回数据如下:

{
 
"_index":   "website",
 
"_type":    "blog",
 
"_id":      "123",
 
"_version":2,
 
"created":   false
}


标记1处表示ES中有一个document可请求添加的document拥有相同的index,type,id。也就是说这个document已经存在了。

在ES内部已经把旧的document标记为了deleted,并且添加了新的document。虽然你已经不能访问这个旧的document,但是他并没有立即被删除。ES将会在你添加更多的数据的时候在后台删除已经被标记为deleted的数据。

在稍后的章节中,我们将会讨论update api,这个api能对document的部分数据进行更新。这个api对改变document显得更为到位,然而事实上,正如以上所描述的一样ES修改一个document要执行一下过程:

1:N从旧的document中检索JSON

2:修改

3:删除旧的document

4:插入新的

唯一的不同就是update的实现方式要通过client请求,而不是get或者index请求。

 

原文:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/update-doc.html

posted @ 2014-05-15 15:24  QQ1350995917  Views(253)  Comments(0)    收藏  举报