仅当元素不存在时,如何才能在ElasticSearch中将其添加到数组中?

时间:2018-09-20 08:12:48

标签: elasticsearch kibana elasticsearch-2.0 elasticsearch-painless

仅当该用户不存在且用户数不存在时,如何才能将其添加到弹性搜索中?

    {
            "script" : {
                "source": "if (ctx._source.users != null){ctx._source.user_count += params.count;  ctx._source.users.add(ctx._source.users.indexOf(params.user))}",
                "lang": "painless",
                "params" : {
                    "user" : "user123",
                    "count": 1
                }
            }
        }

在上面的代码中,我只是添加用户而不检查用户是否已经存在,这可能导致多个具有相同用户名的元素。

是否可以仅在用户不存在时添加?

1 个答案:

答案 0 :(得分:0)

对于常规的放置操作,您可以添加查询参数op_type=create,如果存在具有该ID的文档,则会导致放置失败。

例如,如果ID已经为1的用户已经存在,这将失败:

PUT users/_doc/1?op_type=create
{
    "user" : "user1",
    "department" : "IT"
}

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html#operation-type