【问题标题】:In Elasticsearch searches, are query string parameters for GET requests and the "Query DSL" for POST requests functionally equivalent?在 Elasticsearch 搜索中,GET 请求的查询字符串参数和 POST 请求的“查询 DSL”在功能上是否等效?
【发布时间】:2020-07-22 07:40:06
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 这并不能直接回答您的问题,但可能值得注意的是,AWS 现在为他们的 Elasticsearch 提供了Fine-grained Access Control,这允许比简单地通过 HTTP 方法进行更精细的授权。

标签: elasticsearch querydsl


【解决方案1】:
  1. 根据docs

    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 的行为有点令人困惑,但当您使用 body 执行 GET 时,即使是 Kibana 也会在后台发送 POST。如果您必须使用GET,某些查询结果可能会出乎意料。您的确切用例是什么?我们在讨论哪些查询?

仅供参考,更有用的信息是 herehere

【讨论】:

    猜你喜欢
    • 2020-06-30
    • 2021-03-22
    • 2019-02-27
    • 2012-04-12
    • 2016-07-09
    • 2019-05-29
    • 1970-01-01
    • 2014-12-13
    • 2014-06-15
    相关资源
    最近更新 更多