使用 Python 的 elasticsearch 客户端进行批量更新



我正在尝试根据文档属性的状态更改进行批量更新。 Create工作正常,但bulk吓坏了。我收到一个错误,大意是"缺少脚本或文档",但一切看起来都不错。

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

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']
]

请注意,"_source"到{'doc':result['_source']}的细微变化

相关内容

  • 没有找到相关文章

最新更新