我在python中使用此代码来更新elasticsearch中的文档。它运行正常,但很难将它用于数百万个文档,因为每次都必须初始化id
值以更新每个文档。
from elasticsearch import Elasticsearch, exceptions
elasticsearch = Elasticsearch()
elasticsearch.update(index='testindex', doc_type='AAA', id='AVpwMmhnpIpyZkmdMQkT',
body={
'doc':{'Device': 'updated'}
}
)
我在Elasticsearch文档中读到它尚未包含但是: https://www.elastic.co/guide/en/elasticsearch/reference/current/_updating_documents.html
请注意,在撰写本文时,更新只能在a上执行 单个文档一次。将来,Elasticsearch可能会提供 在给定查询条件的情况下更新多个文档的能力(如 SQL UPDATE-WHERE语句)。
答案 0 :(得分:12)
使用update_by_query
(不是update
)和script
,您应该能够更新符合您查询的文档。
q = {
"script": {
"inline": "ctx._source.Device='Test'",
"lang": "painless"
},
"query": {
"match": {
"Device": "Boiler"
}
}
}
es.update_by_query(body=q, doc_type='AAA', index='testindex')
以上对我有用。 q
找到与您的查询匹配的文档,脚本使用每个文档的_source
更新值。
我希望它也适用于您,可能会对您要使用的查询进行一些调整。