【问题标题】:How to update data with ElasticSearch resolver in AWS AppSync如何在 AWS AppSync 中使用 ElasticSearch 解析器更新数据
【发布时间】:2020-02-07 21:25:15
【问题描述】:

我正在尝试使用 ElasticSearch 解析器更新 AppSync 中的现有值。以下是如何使用 ElasticSearch 解析器更新现有数据。但是每当我运行该代码时,都会发现错误消息。

{
    "version":"2017-02-28",
    "operation":"POST",
    "path":"/mydata/logs/_update/$context.arguments.input.id",
    "params":{
        "headers":{},
        "queryString":{},
        "body":{
            "script": {
                "params" : {
                    "read": true
                }
            }
        }
    }
}

错误信息:

错误:GraphQL 错误:Elasticsearch 响应错误:Bad 请求

但我尝试使用 PUT 方法,现有列被移动,只添加了 read: true 列。

{
    "version":"2017-02-28",
    "operation":"PUT",
    "path":"/mydata/logs/$context.arguments.input.id",
    "params":{
        "headers":{},
        "queryString":{},
        "body":{
            "read": true
        }
    }
}

请告诉我如何解决它,谢谢。

【问题讨论】:

    标签: elasticsearch aws-appsync


    【解决方案1】:

    我遇到了同样的错误。我认为问题之一是路径。您正在动态访问输入 ID。我们应该类似的东西吗 “/mydata/logs/${context.arguments.input.id}/_update”。如果您仍然遇到此问题,请告诉我。

    {
        "version":"2017-02-28",
        "operation":"POST",
        "path":"/mydata/logs/${context.arguments.input.id}/_update",
        "params":{
            "headers":{},
            "queryString":{},
            "body":{
                "script": {
                    "params" : {
                        "read": true
                    }
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      我正在通过 AppSync 进行 ElasticSearch upsert 操作,下面是我的 request.vtl 代码 sn-p。

      #set($args=$ctx.args)
      #set($id=$util.defaultIfNull($args.id, $util.autoId()))
      #set($text=$args.text)
      #set($searchContextInput=$args.searchContextInput)
      #set($contextTypeList=$searchContextInput.contextType)
      #set($contextId=$searchContextInput.contextId)
      #set($ownerId=$ctx.identity.claims.get("custom:logicalId"))
      #set($reqEndpoint="/recent/_doc/${id}/_update")
      #set($now=$util.time.nowISO8601())
      #set($meta={
        "contextId": $contextId,
        "contextType": $contextTypeList,
        "text": $text
      })
      #set($bodyReq={
        "script" : {
          "source": "if(ctx._source.meta==null){ ctx._source.meta=[];} ctx._source.meta.add(params.meta); ctx._source.modified=params.modified",
          "lang": "painless",
          "params" : {
            "meta": $meta,
            "modified": $now
          }
        },
        "upsert" : {
          "id" : $id,
          "meta": [$meta],
          "created": $now,
          "modified": $now
        }
      })
      {
        "version": "2017-02-28",
        "operation": "POST",
        "path": $util.toJson($reqEndpoint),
        "params": {
          "body": $util.toJson($bodyReq)
        }
      }
      
      

      【讨论】:

        猜你喜欢
        • 2019-01-06
        • 2018-11-15
        • 2019-10-14
        • 2019-02-04
        • 2018-10-11
        • 2020-09-29
        • 2019-04-16
        • 2019-02-03
        • 2020-02-12
        相关资源
        最近更新 更多