使用Python的弹性搜索

时间:2016-02-03 16:26:23

标签: python elasticsearch elasticsearch-py

我尝试根据文档属性的状态更改进行批量更新。创建工作正常,但批量是吓坏了。我收到了错误,因为#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...') 

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

1 个答案:

答案 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']}