Python调用Elasticsearch查询报错unknown query [aggs] 求解决
Elasticsearch查询报错:unknown query [aggs] 问题排查与解决
问题原因
你将聚合语句(aggs)错误嵌套在了query参数内部,违反了Elasticsearch Search API的结构规范。在Elasticsearch的请求体中,aggs是顶级参数,需要和query、size等参数处于同一层级,而非作为query的子字段存在。Elasticsearch解析时会把query内的字段当作查询语句处理,自然无法识别aggs这个“查询类型”,因此抛出parsing_exception错误。
解决方案
将aggs从query字典中移出,放到和query、size同级的位置。修正后的代码如下:
response = es_host.search( index=f"<index>", query={ "bool": { "must": [], "filter": [ {"match_phrase": {"parsed_log.responseStatusCode": 200}}, {"range": { "log-time": { "format": "strict_date_optional_time", "gte": "2023-07-20T03:30:00.000Z", "lte": "2023-07-21T03:30:00.000Z" } }} ], "should": [], "must_not": [] } }, aggs={ "0": { "terms": { "field": "parsed_log.requestPath.keyword", "order": {"_count": "desc"}, "size": 10000 } } }, size=0, script_fields={}, stored_fields=["*"], runtime_mappings={} )
说明:保留size=0是合理的,因为我们仅需要聚合统计结果,无需返回具体文档,能有效提升查询效率。
内容的提问来源于stack exchange,提问作者Joz
相关产品推荐
相关产品推荐

