如果字段不存在,则为Elasticsearch Update API

era*_*ran 5 elasticsearch

upsert的例子是:

curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
    "script" : "ctx._source.counter += count",
    "params" : {
        "count" : 4
    },
    "upsert" : {
        "counter" : 1
    }
}'
Run Code Online (Sandbox Code Playgroud)

如果以前不存在该文档,则该方法有效.

假设我想更新不一定存在的字段,但文档存在.例如,该文档可能还没有计数器字段.

我该怎么做呢?

imo*_*tov 10

您可以使用更新脚本来检查字段是否存在:

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
    }
}'
Run Code Online (Sandbox Code Playgroud)