我正在关注 Elasticsearch 官方文档,其中有一个关于修改文档的部分: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/_modifying_your_data.html
所以我已经有一个文档/customer/_doc/1:
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "ajay"
}
}
Run Code Online (Sandbox Code Playgroud)
下面是“修改”的请求
PUT /customer/_doc/1
{
"firstname": "ajay",
"lastname": "tanwar"
}
Run Code Online (Sandbox Code Playgroud)
GET将返回更新后的文档
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"_seq_no" : 2,
"_primary_term" : 1,
"found" : true,
"_source" : {
"firstname" : "ajay",
"lastname" : "tanwar"
}
}
Run Code Online (Sandbox Code Playgroud)
在文档的下一页上,更新文档 https://www.elastic.co/guide/en/elasticsearch/reference/6.2/_updating_documents.html 下面是用于“更新”的请求
POST /customer/_doc/1/_update
{
"doc":{
"firstname": "ajay",
"lastname": "tanwar"
}
}
Run Code Online (Sandbox Code Playgroud)
这也返回与“修改”相同的结果。
我在这两者中注意到了两个区别:
_version每个请求。而“更新”请求保持_version不变"result" : "updated"而“更新”请求的响应包含"result" : "noop"但我很少有疑问:首先,为什么“修改”会返回"result" : "updated"?文档本身说这是一个修改操作。为什么要“修改”回报"result" : "noop"?顺便说一句,什么是noop?
如果我们从逻辑上来说,修改和更新是同一件事。这两个不同的 API 的目的是什么?
修改文档时,您会删除旧文档并在其位置插入一个全新的文档。这与 HTTP 的方法类似PUT,因为它只是用 HTTP 正文中发送的内容替换旧文档。
当您更新文档时,您会对旧文档进行更改。在内部,ElasticSearch 还将删除旧文档并插入新的(更新的)文档。但是,此操作应被视为只是对旧文档进行了更改。这与 HTTP 的PATCH方法类似,它将保留旧文档并仅应用 HTTP 正文中发送的更改。
"result" : "updated"意味着对 ElasticSearch 数据库进行了更改,而"result" : "noop"(无操作)意味着什么都没有发生(可能是因为更新后的最终结果与更新前相同)。
| 归档时间: |
|
| 查看次数: |
1951 次 |
| 最近记录: |