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