首页 > 解决方案 > 来自 Lambda 的 AppSync 映射响应从 ElasticSearch 获取结果

问题描述

我正在尝试从 AppSync 调用一个 lambda 函数,传递一个搜索查询。lambda 正在调用返回结果集的弹性搜索。

我能够将结果集映射到 graphQL Schama 中的不同字段

$#set($result = {
   "statusCode": "${context.result.statusCode}",
   "headers": "${context.result.headers}",
   "isBase64Encoded": "${context.result.isBase64Encoded}",
   "body": "${context.result.body}"
})
$util.toJson($result)

在正文中获取我需要然后解析并将它们映射到 Schama 的搜索结果集。

我无法提取响应 ${context.result.body.hits.hits} 来遍历 _source 并设置搜索结果集

任何建议和指导都会非常有帮助。

标签: elasticsearchaws-lambdaaws-appsyncaws-cloud9

解决方案


AppSync 内置了对 Amazon Elasticsearch 解析器的支持。您可以在此处找到更多相关信息!

但是,如果您希望保留当前的 ​​Lambda 解析器,您可以尝试以下映射模板:

## Delcare an empty array
#set( $result = [] )

## Loop through results
#foreach($entry in $context.result.hits.hits)   

    ## Add each item to the result array
    $util.qr($result.add(
    {
        'id' : $entry.get("_source")['id'],
        'title' : $entry.get("_source")['fields']['title'],
        'plot' : $entry.get("_source")['fields']['plot'],
        'year' : $entry.get("_source")['fields']['year'],
        'url' : $entry.get("_source")['fields']['image_url']
    }))

#end

## Parse the result
$util.toJson($result)

推荐阅读