本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS AppSync JavaScript 的解析器函數參考 OpenSearch
Amazon OpenSearch Service 的 AWS AppSync 解析器可讓您使用 GraphQL 將資料存放和擷取到帳戶中現有的 OpenSearch Service 網域。此解析器的運作方式是允許您將傳入的 GraphQL 請求映射到 OpenSearch 服務請求中,然後將 OpenSearch 服務回應映射回 GraphQL 。本節說明支援 OpenSearch 服務操作的函數請求和回應處理常式。
請求
大多數 OpenSearch 服務請求物件具有共同結構,其中只有幾件變更。下列範例會根據 OpenSearch 服務網域執行搜尋,其中文件為 類型 ,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 會傳送回應給 ,該回應 AWS AppSync 需要轉換為 GraphQL 。
大多數 GraphQL 查詢正在從 OpenSearch 服務回應尋找 _source
欄位。由於您可以執行搜尋來傳回個別文件或文件清單, OpenSearch 因此服務中有兩種常用的回應模式:
結果清單
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
欄位
注意
這僅適用於請求處理常式。
HTTP AWS AppSync 傳送至 OpenSearch 服務網域的方法或動詞 (GETPOST、PUT、 HEAD或 DELETE)。金鑰與值皆必須為字串。
"operation" : "PUT"
path
欄位
注意
這僅適用於請求處理常式。
來自 OpenSearch 的服務請求的搜尋路徑 AWS AppSync。這會URL為操作的動詞形成 HTTP 。金鑰與值皆必須為字串。
"path" : "/indexname/type" "path" : "/indexname/type/_search"
評估請求處理常式時,此路徑會作為HTTP請求的一部分傳送,包括 OpenSearch 服務網域。例如,之前的範例可轉譯為:
GET https://opensearch-domain-name.REGION.es.amazonaws.com/indexname/type/_search
params
欄位
注意
這僅適用於請求處理常式。
用於指定您的搜尋執行的動作,最常見的方式是設定內文 內的查詢值。不過,有多項其他功能可設定,例如回應的格式。
-
標頭
標頭資訊,以金鑰值對形式。金鑰與值皆必須為字串。例如:
"headers" : { "Content-Type" : "application/json" }
注意
AWS AppSync 目前僅支援JSON作為
Content-Type
。 -
queryString
指定常見選項的鍵值對,例如JSON回應的程式碼格式。金鑰與值皆必須為字串。例如,如果您想要取得格式正確的 JSON,您會使用:
"queryString" : { "pretty" : "true" }
-
本文
這是請求的主要部分, AWS AppSync 允許 向您的 OpenSearch 服務網域建立格式良好的搜尋請求。金鑰必須是由物件組成的字串。以下顯示幾個示範。
範例 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'] }, }, }, }, }; }