elasticsearch - 递增计数器或创建文档(如果不存在)

时间:2015-10-02 18:55:17

标签: java elasticsearch counter

我正在使用此查询递增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,如果不存在。

1 个答案:

答案 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
}

上述内容可以很容易地转换为您可能使用的客户端。