Elasticsearch查询报错:按jobid去重获取错误记录失败
Elasticsearch查询语法错误排查
错误原因
你的Query DSL把aggs(聚合配置)错误嵌套在了query对象内部。Elasticsearch的查询结构中,query和aggs是同级的顶级字段,不能将聚合放在查询语句内部,这直接导致了语法解析错误。
修正后的基础查询(仅获取唯一jobid)
如果只是需要获取所有出现ERROR的唯一metadata.CSBJobId,将aggs移到和query同级的位置即可:
{ "query": { "match_phrase": { "level": "ERROR" } }, "aggs": { "unique_jobs": { "terms": { "field": "metadata.CSBJobId" } } } }
进阶需求:获取每个jobid对应的ERROR记录
如果你的实际需求是返回每个jobid对应的具体ERROR记录,单纯的terms聚合只能得到jobid的统计计数,需要搭配top_hits聚合来获取每个分组下的文档内容:
{ "query": { "match_phrase": { "level": "ERROR" } }, "aggs": { "unique_jobs": { "terms": { "field": "metadata.CSBJobId" }, "aggs": { "error_records": { "top_hits": { "size": 10 // 可根据需要调整每个jobid返回的记录数 } } } } }, "size": 0 // 如果不需要返回原始查询的文档列表,可设置为0 }
内容的提问来源于stack exchange,提问作者Claudio Clemente
相关产品推荐
相关产品推荐

