如何在每次更新时弹性增加一个计数器?

时间:2016-03-12 18:59:59

标签: elasticsearch elasticsearch-py

我想在(url,visits)上创建elasticsearch索引,每次调用函数myfunction时,该索引将保留特定网址的访问次数。我怎样才能做到这一点?到目前为止,我已设法创建插入,但我无法增加计数器。

def myfunction():
    a = elasticsearch.index(index='test_index_1' , doc_type='test_doc_type' , id="url" , body={'data' : {'visits' : 1} , 'doc_as_upsert' : True})
    app.logger.info(a)
    b = elasticsearch.update(index='test_index_1' , doc_type='test_doc_type' , id="url" , body={
        'script' : 'ctx._source.data.visits += visit',
        'params' : {
            'visit' : 1
        }
    })
    app.logger.info(b)

1 个答案:

答案 0 :(得分:0)

您应该使用upsert参数。如果文档不存在,则应使用默认id:url创建包含visits:1的文档:

POST /test_index_1/test_doc_type/{id}/_update
{
   "script" : "ctx._source.visits+=1",
   "upsert": {
       "visits": 1
   }
}