upsert的例子是:
curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
"script" : "ctx._source.counter += count",
"params" : {
"count" : 4
},
"upsert" : {
"counter" : 1
}
}'
如果以前不存在该文档,则可以使用。
假设我想要更新不一定存在的字段,但文档存在。 例如,该文档可能还没有计数器字段。
我该怎么做?
答案 0 :(得分:11)
您可以使用更新脚本检查字段是否存在:
curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
"script" : "if( ctx._source.containsKey(\"counter\") ){ ctx._source.counter += count; } else { ctx._source.counter = 1; }",
"params" : {
"count" : 4
},
"upsert" : {
"counter" : 1
}
}'
答案 1 :(得分:0)
最简单的更新请求形式接受部分文档
doc
参数,只是与现有文档合并。 对象合并在一起,现有的标量字段被覆盖, 并添加了新字段。见Partial Updates to Documents
例如,
(1)创建一个新文档,只有一个字段field1
curl -XPOST localhost:9200/myidx/mytp/myid?pretty -d '{
"field1" : 1
}'
您的文件是,
"_source" : {
"field1" : 1
}
(2)部分更新不存在的字段field2
curl -XPOST localhost:9200/myidx/mytp/myid/_update?pretty -d '{
"doc" : {
"field2" : 2
}
}'
您的文件是,
"_source" : {
"field1" : 1,
"field2" : 2
}
(3)当然,您可以同时更新现有和不存在的字段
curl -XPOST localhost:9200/myidx/mytp/myid/_update?pretty -d '{
"doc" : {
"field2" : 200,
"field3" : 3
}
}'
您的文件是,
"_source" : {
"field1" : 1,
"field2" : 200,
"field3" : 3
}