使用elasticserch dsl更新elasticsearch数据

时间:2018-03-01 08:06:18

标签: python elasticsearch elasticsearch-dsl

如何使用elasticsearch-dsl包更新 elasticsearch 数据?这可能吗?

我找到elasticsearch update api,但看起来有点困难。我要找的是,

searchObj = Search(using=logserver, index=INDEX)
searchObj=searchObj.query("term",attribute=value).update(attribute=new_value)
response = searchObj.execute()

3 个答案:

答案 0 :(得分:1)

如果我没错,elasticsearch_dsl没有更新/批量更新选项 所以,如果你愿意,可以使用elasticsearch-py pckage相同。

示例

from elasticsearch import Elasticsearch

INDEX = 'myindex'
LOG_HOST = 'myhost:myport'
logserver = Elasticsearch(LOG_HOST)

script = "ctx._source.attribute = new_value"

update_body = {

    "query": {
        "bool": {
            "filter": {
                "term": {"attribute": "value"}
            }
        }
    },

    "script": {
        "source": script,
        "lang": "painless"

    }

}

update_response = logserver.update_by_query(index=INDEX, body=update_body)



有关详细信息,请参阅此official documentation

答案 1 :(得分:1)

@kingAas答案不正确。

elasticsearch-dsl支持更新!

通过将索引映射到对象(DocType),它允许 您无需任何JSON休息请求即可轻松保存和更新。

您可以找到API here

的示例

答案 2 :(得分:0)

可能已经晚了,但我将这些答复留给仍然存在相同问题的人员: elasticsearch-dsl提供可在扩展elasticsearch-dsl的Document类的类上调用的更新功能。以下是代码:

data = yourIndexClass.get(id=documentIdInIndex)
data.update(key=NewValue)

就是这样。简单。 Find details Here