使用OpenSearch _update_by_query报错unknown query [query]求助
问题分析与修复
1. 请求体嵌套错误(直接触发解析报错)
你发送请求时,把已经包含script和query的update_query额外套了一层{"query": update_query},这完全不符合_update_by_query的API格式要求。OpenSearch收到后会把最外层的query当成一种查询类型,但根本不存在这类查询,所以抛出unknown query [query]的错误。
2. 空值查询条件错误
用match: {"ccstatus": None}无法匹配字段为Null或未指定的文档,OpenSearch需要用exists查询的否定形式来实现这个需求。
修正后的完整代码
import json import requests # 假设username、password、headers已提前定义 update_query = { "script": { "source": "ctx._source.ccstatus = 'NULL'", "lang": "painless" }, "query": { "bool": { "must_not": { "exists": { "field": "ccstatus" } } } } } # 直接发送update_query,无需额外套query键 update_result = requests.post( "https://search-my-test-domain.us-east-1.es.amazonaws.com/temp_test_index/_update_by_query", auth=(username, password), data=json.dumps(update_query), headers=headers ).json() print(update_result)
补充说明
bool.must_not.exists会匹配两种场景:ccstatus字段完全不存在的文档,以及ccstatus字段存在但值为Null的文档,刚好满足你的需求。- 如果只想匹配字段存在但值为Null的文档,可以改用
term查询:"query": { "term": { "ccstatus": { "value": null } } }
内容的提问来源于stack exchange,提问作者dredbound
相关产品推荐
相关产品推荐

