我尝试根据文档属性的状态更改进行批量更新。创建工作正常,但批量是吓坏了。我收到了错误,因为#34;脚本或doc缺失了#34;但一切看起来都不错。
以下是我尝试批量更新的方法:
frequency_cleared = [
{
"_id": result['_id'],
"_type": "the-type",
"_index": "the-index",
"_source": result['_source'],
"_op_type": 'update'
}
for result in search_results['hits']['hits']
]
我迭代结果的原因是因为我在列表理解中使用了if,但由于我能够看到结果,所以我知道这不是问题所在。我无法显示结果并且必须更改属性名称,因为这是我工作的公司。
这是追溯:
Elasticsearch.exceptions.RequestError:
TransportError(400, 'action_request_validation_exception',
'Validation Failed: 1: script or doc is missing...')
省略号表示它显示列表中每个元素失败的相同错误。
答案 0 :(得分:10)
根据文档很难判断,但我发现了问题。如果要进行批量更新,则需要将源包装在字典中,其中键为" doc"。这是正确的例子,希望这有帮助!
frequency_cleared = [
{
'_id': result['_id'],
"_type": "the-type",
"_index": "the-index",
"_source": {'doc': result['_source']},
'_op_type': 'update'
}
for result in search_results['hits']['hits']
]
注意稍微改变是" _source" {' doc':结果[' _source']}