如何使用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()
答案 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