我正在尝试根据文档属性的状态更改进行批量更新。创建工作正常,但数量庞大。我收到“缺少脚本或文档”的错误消息,但一切看起来都不错。

这是我尝试批量更新的方式:

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...')

省略号表示它对列表中的每个元素均显示相同的错误,但失败了。

最佳答案

根据文档很难区分,但我发现了问题所在。如果要进行批量更新,则需要将源文件包装在字典中,键为“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']
]

请注意,对 {'doc':result ['_ source']} 的微小更改是“_source”

关于python - 使用Python的elasticsearch批量更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35182403/

10-12 20:04