修改文档内容有两种方式
1、全部替换:相当于添加一个新文档,把原有文档全部覆盖掉,比如要修改一个age,其余字段也要全部指定。 其实是把原文档标记为deleted,又创建了一个新文档,随着数据的增加,es会在合适的时间把标记为deleted的文档删除掉。
PUT /lib/user/1 { "first_name":"Jane", "last_name":"Lucy", "age":27, "about":"I like to collect rock albums", "interests":["music"] }
2、部分替换:使用_update 只需要指明要修改的字段即可,es查询出document然后使用用户提交过来的数据更新到document中,已有的document被标记为deleted
然后再创建一个新的document。
POST /lib/user/4/_update { "doc":{ "age":28 } }
删除文档,也是先标记为deleted,es在合适的时间再删除掉。
DELETE /lib/user/4
两种方式的区别:
post方式比put方式网络传输的次数要少,从而提高了性能,post方式从查询文档到修改文档,再到创建新的文档都是在es内部实现的,post方式发生并发冲突的可能性降低了。