【问题标题】:AWS API gateway and elastic search get queryAWS API 网关和弹性搜索获取查询
【发布时间】:2019-02-25 19:58:42
【问题描述】:

我需要使用 http 连接直接从 api 网关调用弹性搜索引擎。

https:////_doc/_search?pretty&filter_path=hits.hits._source

我在弹性搜索引擎中有 n 个订单,我想使用 get 查询来获取这些订单,但我只想要我发布的 json 数组并且不想要响应中的任何其他信息。我该怎么做?

例如。

这就是我得到的:

   {
      "hits" : {
        "hits" : [
          {
            "_index" : "gpss_orders",
            "_type" : "_doc",
            "_id" : "4867254",
            "_score" : 1.0,
            "_source" : {
              "orderId" : 4867254,
              "loadId" : 18214,
              "orderTypeId" : 1
          }
       ]
     }
   }

但我想要这样的回应:

[ {
                  "orderId" : 4867254,
                  "loadId" : 18214,
                  "orderTypeId" : 1
              }]

我需要更改 api 网关方法响应吗?

我更改了 api 网关方法响应模板并得到了预期的结果

#set($esOutput = $input.path('$.hits.hits'))
#set($orders = [])
#foreach( $elem in $esOutput )
 #set($order = $elem["_source"])
 #set($response = $orders.add($order) )
#end
$orders

但现在我面临的问题是,虽然来自弹性搜索引擎的响应是正确的 json,但方法集成模板更新后的响应变成这样,没有任何大括号:

[{orderId=4867254, loadId=18214, orderTypeId=1, orderTypeName=Fuel}]

弹性搜索的响应:

"took" : 1,
  "hits" : {
    "hits" : [
      {
        "_id" : "4867254",
        "_score" : 1.0,
        "_source" : {
          "orderId" : 4867254,
          "loadId" : 18214,
          "orderTypeId" : 1,

【问题讨论】:

    标签: amazon-web-services elasticsearch aws-api-gateway


    【解决方案1】:

    没有办法从弹性搜索中塑造返回对象。根据您访问这些数据的方式,您可以使用自己的服务器端代码作为代理进行查询并删除无关信息,然后再将其返回给客户端。一个好处是您可以使用代理来决定根据权限、缓存或速率限制等因素返回哪些信息。

    【讨论】:

    • 我们使用更新映射模板来实现集成响应。请在上面找到解决方案
    最近更新 更多