如何在Elasticsearch Query DSL中使用match与range?查询报错求解
解决Elasticsearch中match与range查询组合的语法错误
嘿,这个问题我之前踩过坑!你收到的parsing_exception错误,核心原因是直接把match和range两个查询并列在query根节点下了——Elasticsearch的查询语法规则里,query节点只能承载一个顶层查询类型,多个查询条件需要用bool查询来做逻辑组合。
修正后的正确请求体
你需要把match和range都放到bool查询的must数组里(must表示所有条件必须同时满足,也就是逻辑与的关系),修正后的完整请求体如下:
{ "query": { "bool": { "must": [ { "match": { "netscaler.ipadd": "192.68.2.39" } }, { "range": { "@timestamp": { "gte": "2015-08-04T11:00:00", "lt": "2015-08-04T12:00:00" } } } ] } }, "aggs": { "avg_grade": { "avg": { "field": "netscaler.stat.system.memusagepcnt" } } } }
简单说明
bool是Elasticsearch最常用的组合查询类型,除了must,还有should(逻辑或)、must_not(逻辑非)等子句,能满足不同的条件组合需求- 你的聚合(
aggs)部分完全没问题,不需要做任何修改
内容的提问来源于stack exchange,提问作者Dante
相关产品推荐
相关产品推荐

