修改文檔內容有兩種方式
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方式發生並發沖突的可能性降低了。