0

我想在 elasticsearch.py​​(版本 7.13.1)中使用 update_by_query 更新多个文档

我的查询是:

es_query = {
    "query": {
        "match": {"user_id.keyword": user_id}
        # "bool": {
        #     "must": [{"term": {"user_id": {"value": user_id}}}]
        # }
    },
    "script": {
        "source": "ctx._source.user_level = params.user_level",
        "params": {
            "user_level": user_level
        },
        "lang": "painless"
    }
}

result = es.update_by_query(index='articles', doc_type='_doc', body=es_query, wait_for_completion=True,
                            ignore=[400, 404], conflicts='proceed', refresh='true')

我已经尝试过匹配以及必须查询,但是文档没有得到更新,没有这样的错误。

我得到的回应是这样的:

{'took': 1, 'timed_out': False, 'total': 0, 'updated': 0, 'deleted': 0, 'batches': 0, 'version_conflicts': 0, 'noops': 0, 'retries': {'bulk': 0, 'search': 0}, 'throttled_millis': 0, 'requests_per_second': -1.0, 'throttled_until_millis': 0, 'failures': []} 

如果我在 Kibana 上运行相同的查询,它会按预期工作。我在这里想念什么?

4

1 回答 1

0

我通过调用requests.post()API 调用而不是使用update_by_query().

然后代码如下所示:

url = os.environ['ES_HOST'] + "/articles/_update_by_query"
result = requests.post(url=url, json=es_query, headers={"content-type": "application/json"})
于 2021-09-16T06:52:43.867 回答