【发布时间】:2019-07-21 20:01:24
【问题描述】:
我正在关注 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"
}
}
下面是“修改”的请求
PUT /customer/_doc/1
{
"firstname": "ajay",
"lastname": "tanwar"
}
GET 将返回更新后的文档
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"_seq_no" : 2,
"_primary_term" : 1,
"found" : true,
"_source" : {
"firstname" : "ajay",
"lastname" : "tanwar"
}
}
在文档的下一页,更新文档 https://www.elastic.co/guide/en/elasticsearch/reference/6.2/_updating_documents.html 以下是用于“更新”的请求
POST /customer/_doc/1/_update
{
"doc":{
"firstname": "ajay",
"lastname": "tanwar"
}
}
这也返回与“修改”相同的结果。
我注意到这两个方面的两个不同之处:
- “修改”请求更新每个请求的
_version。鉴于 “更新”请求保持_version不变 - “修改”请求的响应包含
"result" : "updated"而 “更新”请求的响应包含"result" : "noop"
但我有几个疑问:首先,为什么“修改”返回"result" : "updated"? Docs 本身说这是一个修改操作。为什么“修改”返回"result" : "noop"? noopBTW 是什么?
如果我们按照逻辑进行,修改和更新是一回事。这两个不同的 API 的用途是什么?
【问题讨论】:
标签: elasticsearch