首页 > 解决方案 > 在 elasticsearch 中验证聚合查询

问题描述

我希望有人能解释我为什么会遇到这个问题:我想在启动之前验证一个 ES(在 7.4 版中)查询,如果查询没有aggs子句,一切都可以正常工作,但是,如果查询有aggs, ES说这是一个无效的查询,让我发疯的是查询在 ES 中运行良好,但同时 ES 告诉我这不是一个有效的查询。

我认为是因为 ES 不使用aggs验证查询,但我很想“确定”,我已经阅读了文档,但我没有发现任何线索。

非常感谢。

这是我要验证的 ES 查询示例

        "query": {
            "bool": {
                "must": [
                    {
                        "match_phrase": {
                            "probe_id": {
                                "query": "probe id"
                            }
                        }
                    }
                ]
            }
        },
        "aggs": {
            "agg_by_hours": {
                "terms": {
                    "field": "hours",
                    "size": 24,
                    "order": {
                        "_term": "desc"
                    }
                }
            }
        }
    }```

标签: elasticsearchelasticsearch-aggregation

解决方案


验证查询 API仅支持query部分而不支持aggs部分。没有别的,甚至没有_source,和。您还可以在源代码中看到这一点。sortfromsize

如果您添加?explain=true到您的 URL,您将看到如下解释:

{
  "valid" : false,
  "error" : "org.elasticsearch.common.ParsingException: request does not support [aggs]"
}

因此,您绝对可以验证您的查询,但只参与query其中,您会没事的。


推荐阅读