首页 > 解决方案 > 在 Elasticsearch 搜索中,GET 请求的查询字符串参数和 POST 请求的“查询 DSL”在功能上是否等效?

问题描述

我正在尝试创建一个小型应用程序,该应用程序显示来自 Elasticsearch 上索引的数据(在 AWS 托管的 Elasticsearch 服务上)的一些简单可视化。

据我所知,AWS 对其 ES 服务提供的访问控制程度是基于允许特定的 HTTP 动词(GET、POST 等)来简化我和 ES 管理员的生活,因此我同意这一点应用程序“只读”权限,因此只有 GET 和 HEAD

但是,我看到对于它的搜索 API,ES 公开了一个与查询字符串参数一起使用的 GET 端点,以及一个与基于 JSON 的“查询 DSL”一起使用的 POST 端点。在我在网上和书中看到的所有示例中,这种 DSL 似乎是首选方法。

鉴于 Query DSL 在整个文档中的主导地位,我想知道:

  1. Query DSL 是否公开了标准查询字符串参数没有的功能,或者它们在功能上是否相同?
  2. POST 搜索端点是否会导致任何数据实际被 POST,或者这只是一种允许将 JSON 作为查询发送的解决方法,这与 REST 约定有点不同?

标签: elasticsearchquerydsl

解决方案


  1. 根据文档

    You can use query parameters to define your search criteria directly in the request URI, rather than in the request body. Request URI searches do not support the full Elasticsearch Query DSL, but are handy for testing.

  2. 这种GET行为有点令人困惑,POST但当您使用 body 执行 a 时,即使是 Kibana 也会在后台发送 a GET。如果必须使用GET,某些查询结果可能会出乎意料。您的确切用例是什么?我们在谈论哪些查询?

仅供参考,更多有用的信息在这里这里


推荐阅读