OpenSearch 的 JavaScript 解析器函数参考 - Amazon AppSync
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

OpenSearch 的 JavaScript 解析器函数参考

通过使用适用于 Amazon OpenSearch Service 的 Amazon AppSync 解析器,您可以使用 GraphQL 在您的账户的现有 OpenSearch Service 域中存储和检索数据。该解析器的工作方式是,允许您将传入的 GraphQL 请求映射到 OpenSearch Service 请求,然后将 OpenSearch Service 响应映射回 GraphQL。本节介绍了支持的 OpenSearch Service 操作的函数请求和响应处理程序。

请求

大多数 OpenSearch Service 请求对象具有通用结构,其中仅几个部分发生变化。以下示例对 OpenSearch Service 域运行搜索,其中文档的类型为 post 并按照 id 编制索引。搜索参数在 body 部分定义,而许多常用查询子句在 query 字段中定义。此示例将搜索在文档的 "Nadia" 字段中包含 "Bailey" 和/或 author 的文档。

export function request(ctx) { return { operation: 'GET', path: '/id/post/_search', params: { headers: {}, queryString: {}, body: { from: 0, size: 50, query: { bool: { should: [ { match: { author: 'Nadia' } }, { match: { author: 'Bailey' } }, ], }, }, }, }, }; }

响应

与其他数据源一样,OpenSearch Service 向 Amazon AppSync 发送响应,该响应需要转换为 GraphQL。

大多数 GraphQL 查询从 OpenSearch Service 响应中查找 _source 字段。由于您可以搜索以返回单个文档或文档列表,因此,可以在 OpenSearch Service 中使用两种常见的响应模式:

结果列表

export function response(ctx) { const entries = []; for (const entry of ctx.result.hits.hits) { entries.push(entry['_source']); } return entries; }

单个项目

export function response(ctx) { return ctx.result['_source'] }

operation 字段

(仅请求处理程序)

Amazon AppSync 发送到 OpenSearch Service 域的 HTTP 方法或动词(GET、POST、PUT、HEAD 或 DELETE)。键和值都必须是字符串。

"operation" : "PUT"

path 字段

(仅请求处理程序)

来自 Amazon AppSync 的 OpenSearch Service 请求的搜索路径。这构成了操作的 HTTP 谓词的 URL。键和值都必须是字符串。

"path" : "/indexname/type" "path" : "/indexname/type/_search"

在评估请求处理程序时,该路径将作为 HTTP 请求的一部分发送,包括 OpenSearch Service 域。例如,上一个示例可能会转换为:

GET https://opensearch-domain-name.REGION.es.amazonaws.com/indexname/type/_search

params 字段

(仅请求处理程序)

用于指定搜索执行的操作,最常见的是在正文中设置查询值。但是,可以配置若干其他功能,如响应的格式设置。

  • headers

    标头信息(为键值对)。键和值都必须是字符串。例如:

    "headers" : { "Content-Type" : "application/json" }

    注意

    Amazon AppSync 目前仅支持将 JSON 作为 Content-Type

  • queryString

    指定常用选项的键值对,如 JSON 响应的代码格式设置。键和值都必须是字符串。例如,如果您要获得格式正确的 JSON,应使用:

    "queryString" : { "pretty" : "true" }
  • body

    这是请求的主要部分,它允许 Amazon AppSync 为您的 OpenSearch Service 域创建正确格式的搜索请求。键必须是组成对象的一个字符串。下面介绍了几个演示。

示例 1

返回城市与“seattle”匹配的所有文档:

export function request(ctx) { return { operation: 'GET', path: '/id/post/_search', params: { headers: {}, queryString: {}, body: { from: 0, size: 50, query: { match: { city: 'seattle' } } }, }, }; }

示例 2

返回将“washington”作为城市或州匹配的所有文档。

export function request(ctx) { return { operation: 'GET', path: '/id/post/_search', params: { headers: {}, queryString: {}, body: { from: 0, size: 50, query: { multi_match: { query: 'washington', fields: ['city', 'state'] }, }, }, }, }; }

传递变量

(仅请求处理程序)

您也可以在评估请求处理程序期间传递变量。例如,假设您具有以下 GraphQL 查询,如下所示:

query { searchForState(state: "washington"){ ... } }

函数请求处理程序可能如下所示:

export function request(ctx) { return { operation: 'GET', path: '/id/post/_search', params: { headers: {}, queryString: {}, body: { from: 0, size: 50, query: { multi_match: { query: ctx.args.state, fields: ['city', 'state'] }, }, }, }, }; }