前面的基礎,
Elasticsearch之curl創建索引庫
Elasticsearch之curl創建索引
Elasticsearch之curl創建索引庫和索引時注意事項
Elasticsearch之cur查詢索引
首先,明確一個概念,es包括全部更新和局部更新!
ES全部更新
ES可以使用PUT或者POST對文檔進行更新(全部更新),如果指定ID的文檔已經存在,則執行更新操作。
比如,我這里,id=1文檔存在,那么,就是es全部更新。
注意:
es執行更新操作的時候,ES首先將舊的文檔標記為刪除狀態,然后添加新的文檔,舊的文檔不會立即消失,但是你也無法訪問,
ES會在你繼續添加更多數據的時候在后台清理已經標記為刪除狀態的文檔。
ES局部更新
es為什么需要局部更新?
這個,從字面意思就知道,當然,不想全部更新時,比如一個指定類型下,很多個id,我不想每個id都涉及等。
局部更新,可以添加新字段或者更新已有字段(必須使用POST)
[hadoop@djt002 elasticsearch-2.4.3]$ curl -XGET 'http://192.168.80.200:9200/zhouls/emp/1?_source=name&pretty'
{
"_index" : "zhouls",
"_type" : "emp",
"_id" : "1",
"_version" : 3,
"found" : true,
"_source" : {
"name" : "tom"
}
}
[hadoop@djt002 elasticsearch-2.4.3]$ curl -XGET 'http://192.168.80.200:9200/zhouls/emp/1?_source=name,age&pretty'
{
"_index" : "zhouls",
"_type" : "emp",
"_id" : "1",
"_version" : 3,
"found" : true,
"_source" : {
"age" : 25,
"name" : "tom"
}
}
[hadoop@djt002 elasticsearch-2.4.3]$
[hadoop@djt002 elasticsearch-2.4.3]$ curl -XPOST 'http://192.168.80.200:9200/zhouls/emp/1/_update' -d '{"doc":{"name":"mack"}}'
{"_index":"zhouls","_type":"emp","_id":"1","_version":4,"_shards":{"total":2,"successful":1,"failed":0}}[hadoop@djt002 elasticsearch-2.4.3]$
[hadoop@djt002 elasticsearch-2.4.3]$
[hadoop@djt002 elasticsearch-2.4.3]$
[hadoop@djt002 elasticsearch-2.4.3]$ curl -XGET 'http://192.168.80.200:9200/zhouls/emp/1?_source=name&pretty'
{
"_index" : "zhouls",
"_type" : "emp",
"_id" : "1",
"_version" : 4,
"found" : true,
"_source" : {
"name" : "mack" 成功更改了name
}
}
[hadoop@djt002 elasticsearch-2.4.3]$ curl -XGET 'http://192.168.80.200:9200/zhouls/emp/1?pretty'
{
"_index" : "zhouls",
"_type" : "emp",
"_id" : "1",
"_version" : 4,
"found" : true,
"_source" : {
"name" : "mack",
"age" : 25
}
}
[hadoop@djt002 elasticsearch-2.4.3]$
總結:
ES全部更新,使用PUT或者POST
ES局部更新,使用POST
ES的全部更新和局部更新,底層有什么區別?
答:全部更新,是直接把之前的老數據,標記為刪除狀態,然后,再添加一條更新的。
局域更新,只是修改某個字段。