• 更新整个文档

    更新整个文档

    文档在Elasticsearch中是不可变的——我们不能修改他们。如果需要更新已存在的文档,我们可以使用《索引文档》章节提到的index API 重建索引(reindex) 或者替换掉它。

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

    在响应中,我们可以看到Elasticsearch把_version增加了。

    1. {
    2. "_index" : "website",
    3. "_type" : "blog",
    4. "_id" : "123",
    5. "_version" : 2,
    6. "created": false <1>
    7. }
    • <1> created标识为false因为同索引、同类型下已经存在同ID的文档。

    在内部,Elasticsearch已经标记旧文档为删除并添加了一个完整的新文档。旧版本文档不会立即消失,但你也不能去访问它。Elasticsearch会在你继续索引更多数据时清理被删除的文档。

    在本章的后面,我们将会在《局部更新》中探讨update API。这个API 似乎 允许你修改文档的局部,但事实上Elasticsearch遵循与之前所说完全相同的过程,这个过程如下:

    1. 从旧文档中检索JSON
    2. 修改它
    3. 删除旧文档
    4. 索引新文档

    唯一的不同是update API完成这一过程只需要一个客户端请求既可,不再需要getindex请求了。