如何在AWS AppSync中使用ElasticSearch解析器更新数据

时间:2020-01-31 04:35:30

标签: elasticsearch aws-appsync

我正在尝试使用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响应错误:错误 请求

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

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

谢谢,请让我知道如何解决。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的错误。我认为问题之一是路径。您正在动态访问输入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
                }
            }
        }
    }
}

答案 1 :(得分:0)

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

#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)
  }
}