我正在尝试接收一个 JSON 块,以便它完全覆盖 Elasticsearch 记录。在我看来,如果不存在更新将添加新密钥,或者如果存在则覆盖它们,但它不会删除未包含在更新中的密钥。
我的用户将发送作为旧_source
字段的已编辑 JSON,因此最简单的更新方法是删除旧_source
的 JSON 并将新的 JSON 用作全新的_source
. 我到目前为止:
from elasticsearch import Elasticsearch
ES = Elasticsearch()
ES.update(index=ELASTIC_INDEX_NAME, doc_type=ELASTIC_EVENT_DOC_TYPE_NAME, id="44", body={"script": {"source": "ctx.op = 'delete'", "lang": "painless"}})
TransportError: TransportError(500, u'script_parse_exception', u'unexpected field [source]')
也未能仅删除一个密钥以查看我是否可以在以下位置执行此操作:
ES.update(index=ELASTIC_INDEX_NAME, doc_type=ELASTIC_EVENT_DOC_TYPE_NAME, id="33", body={"script": "ctx._source.remove('item_id')"})
RequestError: TransportError(400, u'illegal_argument_exception', u'[Ares][127.0.0.1:9300][indices:data/write/update[s]]')
有没有办法用新的 JSON 文档完全覆盖 Elasticsearch 文档?