Referencia a la función de solucionador de JavaScript de AWS AppSync para OpenSearch - AWS AppSync

Referencia a la función de solucionador de JavaScript de AWS AppSync para OpenSearch

El solucionador de AWS AppSync para Amazon OpenSearch Service permite utilizar GraphQL para almacenar y recuperar datos de dominios de OpenSearch Service ya existentes en su cuenta. Para funcionar, este solucionador permite mapear una solicitud de GraphQL entrante a una solicitud de OpenSearch Service y, a continuación, mapear la respuesta de OpenSearch Service a GraphQL. En esta sección se describen los controladores de solicitudes y respuestas de función para las operaciones de OpenSearch Service admitidas.

Solicitud

La mayoría de objetos de solicitud de OpenSearch Service presentan una estructura común en la que tan solo cambian unos pocos elementos. En el siguiente ejemplo se ejecuta una búsqueda en un dominio de OpenSearch Service donde los documentos son del tipo post y se indexan por id. Los parámetros de búsqueda se definen en la sección body y muchas de las cláusulas de consulta comunes se definen en el campo query. En este ejemplo se buscan documentos que contengan "Nadia", "Bailey" o ambos en el campo author de un documento:

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' } }, ], }, }, }, }, }; }

Respuesta

Al igual que ocurre con otros orígenes de datos, OpenSearch Service envía una respuesta a AWS AppSync que debe convertirse a GraphQL.

La mayoría de consultas de GraphQL buscan el campo _source de una respuesta de OpenSearch Service. Puesto que puede hacer búsquedas para devolver un documento individual o una lista de documentos, en OpenSearch Service se utilizan dos patrones de respuesta comunes:

Lista de resultados

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

Elemento individual

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

Campo operation

nota

Esto se aplica solo al controlador de solicitudes.

Método o verbo HTTP (GET, POST, PUT, HEAD o DELETE) que envía AWS AppSync al dominio de OpenSearch Service. Tanto la clave como el valor deben ser cadenas.

"operation" : "PUT"

Campo path

nota

Esto se aplica solo al controlador de solicitudes.

Ruta de búsqueda de una solicitud de OpenSearch Service desde AWS AppSync. Esto constituye una URL para el verbo HTTP de la operación. Tanto la clave como el valor deben ser cadenas.

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

Cuando se evalúa el controlador de solicitudes, esta ruta se envía como parte de la solicitud HTTP, incluido el dominio de OpenSearch Service. Por ejemplo, el ejemplo anterior puede convertirse como:

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

Campo params

nota

Esto se aplica solo al controlador de solicitudes.

Se utiliza para especificar la acción que realiza la búsqueda, normalmente estableciendo el valor query dentro de body. Sin embargo, se pueden configurar otras funcionalidades, como, por ejemplo, el formato de las respuestas.

  • headers

    Es la información del encabezado en forma de pares clave-valor. Tanto la clave como el valor deben ser cadenas. Por ejemplo:

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

    nota

    Actualmente, AWS AppSync solo admite JSON como Content-Type.

  • queryString

    Son los pares clave-valor que especifican opciones comunes, como el formato de código de las respuestas JSON. Tanto la clave como el valor deben ser cadenas. Por ejemplo, si desea JSON con formato pretty, puede especificar:

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

    Esta es la parte principal de la solicitud, la que permite a AWS AppSync crear una petición de búsqueda bien formada dirigida al dominio de OpenSearch Service. La clave debe ser una cadena compuesta por un objeto. A continuación se muestran algunos ejemplos.

Ejemplo 1

Devuelve todos los documentos que incluyan la ciudad “seattle”:

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

Ejemplo 2

Devuelve todos los documentos que incluyan “washington” como ciudad o estado:

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'] }, }, }, }, }; }

Variables de transferencia

nota

Esto se aplica solo al controlador de solicitudes.

También puede pasar variables como parte de la evaluación en su controlador de solicitudes. Por ejemplo, suponga que ha tenido la siguiente consulta de GraphQL:

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

El controlador de solicitudes de función podría ser el siguiente:

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'] }, }, }, }, }; }