我正在使用此查询递增elasticsearch中的计数器:
{
"script" : "ctx._source.value += 1"
}
但是,如果文档不存在,我会收到错误。我正在使用Java API,这是我的代码:
UpdateResponse updateResponse = client.prepareUpdate("app", "counters", "message")
.setScript("ctx._source.value += 1", ScriptService.ScriptType.INLINE)
.setRetryOnConflict(5)
.get();
我收到了一个DocumentMissingException:[app] [1] [counter] [message]:缺少文档
我想要的是更新文档(如果存在),或创建一个文档,其中“value”= 0,如果不存在。
答案 0 :(得分:1)
如果文档存在但字段value
不存在,则查询为
"script" : {
"inline": "ctx._source.value = ctx._source.value ? ctx._source.value += 1 : 1"
}
如果文档根本不存在,那么以下内容将创建包含value
字段的文档
"script" : {
"inline": "ctx._source.value += 1"
},
"upsert" : {
"value" : 1
}
上述内容可以很容易地转换为您可能使用的客户端。