通过查询

时间:2017-02-27 15:19:34

标签: python elasticsearch

我在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语句)。

1 个答案:

答案 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更新值。

我希望它也适用于您,可能会对您要使用的查询进行一些调整。