本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS AppSync的解析器映射模板参考 OpenSearch
注意
我们现在主要支持 APPSYNC _JS 运行时及其文档。请考虑在此处使用 APPSYNC _JS 运行时及其指南。
亚马逊 OpenSearch 服务的 AWS AppSync 解析器使您能够使用 GraphQL 存储和检索账户中 OpenSearch 现有服务域中的数据。此解析器的工作原理是允许您将传入的 GraphQL 请求映射到服务请求,然后将 OpenSearch 服务响应映射 OpenSearch 回 GraphQL。本节介绍支持的 OpenSearch 服务操作的映射模板。
请求映射模板
大多数 OpenSearch 服务请求映射模板都有一个共同的结构,其中只有几个部分会发生变化。以下示例针对 OpenSearch 服务域运行搜索,其中文档组织在名为的索引下post
。搜索参数在 body
部分定义,而许多常用查询子句在 query
字段中定义。此示例将搜索在文档的 "Nadia"
字段中包含 "Bailey"
和/或 author
的文档。
{ "version":"2017-02-28", "operation":"GET", "path":"/post/_search", "params":{ "headers":{}, "queryString":{}, "body":{ "from":0, "size":50, "query" : { "bool" : { "should" : [ {"match" : { "author" : "Nadia" }}, {"match" : { "author" : "Bailey" }} ] } } } } }
响应映射模板
与其他数据源一样, OpenSearch 服务会向发送需要转换为 GraphQL 的响应。 AWS AppSync
大多数 GraphQL 查询都是从 OpenSearch 服务响应中查找该_source
字段。由于您可以通过搜索返回单个文档或文档列表,因此 S OpenSearch ervice 中使用了两个常见的响应映射模板:
结果列表
[ #foreach($entry in $context.result.hits.hits) #if( $velocityCount > 1 ) , #end $utils.toJson($entry.get("_source")) #end ]
单个项目
$utils.toJson($context.result.get("_source"))
operation
字段
注意
这仅适用于请求映射模板。
HTTP AWS AppSync 发送到 OpenSearch 服务域的方法HEAD或动词(GETPOSTPUT、、或DELETE)。键和值都必须是字符串。
"operation" : "PUT"
path
字段
注意
这仅适用于请求映射模板。
来自的 OpenSearch 服务请求的搜索路径 AWS AppSync。这构成URL了操作动HTTP词的 a。键和值都必须是字符串。
"path" : "/<indexname>/_doc/<_id>" "path" : "/<indexname>/_doc" "path" : "/<indexname>/_search" "path" : "/<indexname>/_update/<_id>
评估映射模板时,此路径将作为HTTP请求的一部分发送,包括 OpenSearch 服务域。例如,上一个示例可能会转换为:
GET https://opensearch-domain-name.REGION.es.amazonaws.com/indexname/type/_search
params
字段
注意
这仅适用于请求映射模板。
用于指定搜索执行的操作,最常见的是在正文中设置查询值。但是,可以配置若干其他功能,如响应的格式设置。
-
headers
标头信息(为键值对)。键和值都必须是字符串。例如:
"headers" : { "Content-Type" : "application/json" }
注意
AWS AppSync 目前仅支持JSON作为
Content-Type
. -
queryString
指定常用选项的键值对,例如响应的代码格式。JSON键和值都必须是字符串。例如,如果你想获得漂亮的格式JSON,你可以使用:
"queryString" : { "pretty" : "true" }
-
body
这是您请求的主要部分, AWS AppSync 允许您针对您的 OpenSearch 服务域名起草格式良好的搜索请求。键必须是组成对象的一个字符串。下面介绍了几个演示。
示例 1
返回城市与“seattle”匹配的所有文档:
"body":{ "from":0, "size":50, "query" : { "match" : { "city" : "seattle" } } }
示例 2
返回将“washington”作为城市或州匹配的所有文档。
"body":{ "from":0, "size":50, "query" : { "multi_match" : { "query" : "washington", "fields" : ["city", "state"] } } }
传递变量
注意
这仅适用于请求映射模板。
您也可以在VTL语句中将变量作为评估的一部分进行传递。例如,假设您具有以下 GraphQL 查询,如下所示:
query { searchForState(state: "washington"){ ... } }
映射模板可能将状态作为参数:
"body":{ "from":0, "size":50, "query" : { "multi_match" : { "query" : "$context.arguments.state", "fields" : ["city", "state"] } } }
有关可以包含在中的实用程序列表VTL,请参阅访问请求标头。