全局更新
在 Elasticsearch 中document是不可改变 的,不能修改它们。所以当我们使用更新API时,其实是经历了:
- 查询旧数据
- 标记旧数据为删除状态
- 插入新数据
这里并不是将旧文档直接删除,而是打上删除标记,是为了提升ES的性能。但是如果一直不删除旧文档则会越堆越多,所以当旧文档到达一定数量时,ES会做一次清理,物理删除掉这些被标记删除的文档。
全局更新的API其实就是PUT新增的API:
PUT /employee/_doc/1
{
"name":"xiaozhangsan",
"age":2,
"signature":"I'm a baby",
"hobby":["sugar","milk"]
}
这里将员工 zhangsan 全局更新为他的儿子 xiaozhangsan,返回结果:
{
"_index" : "employee",
"_type" : "_doc",
"_id" : "1",
"_version" : 5,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"_seq_no" : 9,
"_primary_term" : 2
}