本節我們來講解一下ES中文檔的相關操作
一:索引/更新文檔
ES中索引和更新文檔都是PUT
操作。
PUT /{IndexName}/{TypeName}/{ID}
比如我又一條測試文檔如下:
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [
{
"_index" : "user",
"_type" : "introduce",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "jack",
"age" : 20,
"gender" : "male"
}
}
]
}
}
索引一條新文檔
PUT /user/introduce/2
{
"name":"lucy",
"age":18,
"gender":"female"
}
執行檢索GET /user/introduce/_search?pretty
查看文檔
......
{
"_index" : "user",
"_type" : "introduce",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"name" : "lucy",
"age" : 18,
"gender" : "female"
}
},
{
"_index" : "user",
"_type" : "introduce",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "jack",
"age" : 20,
"gender" : "male"
}
}
......
這時候就插入了索引了一條新的文檔了,接下來我們更新一條文檔試試
PUT /user/introduce/1
{
"name":"jone"
}
//返回
{
"_index" : "user",
"_type" : "introduce",
"_id" : "1",
"_version" : 4,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 1
}
注意到
result
變爲了updated
再次執行檢索GET /user/introduce/_search?pretty
查看文檔
........
"hits" : [
{
"_index" : "user",
"_type" : "introduce",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"name" : "lucy",
"age" : 18,
"gender" : "female"
}
},
{
"_index" : "user",
"_type" : "introduce",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "jone"
}
}
]
.......
注意到沒有,
_id
爲1的文檔裏面只有name
一個字段了,age
和gender
都沒了。這說明PUT
是對整個文檔更新而不是文檔中的某一個或某幾個字段更新
文檔局部字段更新POST
我先還原數據,然後再對某幾個字段更新
POST /{IndexName}/{TypeName}/{ID}/_update
{
"doc":{}
}
POST /user/introduce/1/_update
{
"doc":{
"name":"jone",
"age":22
}
}
POST也可以創建一個文檔
POST /user/introduce?pretty
{
"age":20
}
//返回
{
"_index" : "user",
"_type" : "introduce",
"_id" : "VXetwmkBA0w1SMUATD7Z",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
系統會自動分配
_id
這一點和MongoDB
是一樣的
二:刪除文檔
DELETE /{IndexName}/{TypeName}/{ID}?pretty