本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS AppSync 的解析器映射範本參考 OpenSearch
注意
我們現在主要支援 APPSYNC_JS 執行期及其文件。請考慮在此處使用 APPSYNC_JS 執行期及其指南。
Amazon OpenSearch Service 的 AWS AppSync 解析器可讓您使用 GraphQL 將資料存放和擷取到帳戶中現有的 OpenSearch Service 網域。此解析器的運作方式是允許您將傳入的 GraphQL 請求映射到 OpenSearch 服務請求中,然後將 OpenSearch 服務回應映射回 GraphQL 。本節說明支援 OpenSearch 服務操作的映射範本。
請求映射範本
大多數 OpenSearch 服務請求映射範本具有共同結構,其中只有幾件變更。下列範例會根據 OpenSearch Service 網域執行搜尋,其中文件是以名為 的索引組織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 Service 會傳送回應給 ,該回應 AWS AppSync 需要轉換為 GraphQL 。
大多數 GraphQL 查詢正在從 OpenSearch 服務回應尋找 _source
欄位。由於您可以執行搜尋來傳回個別文件或文件清單, OpenSearch 因此服務中會使用兩個常見的回應映射範本:
結果清單
[ #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 服務網域的方法或動詞 (GETPOST、PUT、 HEAD或 DELETE)。金鑰與值皆必須為字串。
"operation" : "PUT"
path
欄位
注意
這僅適用於請求映射範本。
來自 OpenSearch 的服務請求的搜尋路徑 AWS AppSync。這會URL為操作的動詞形成 HTTP 。金鑰與值皆必須為字串。
"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" : { "Content-Type" : "application/json" }
注意
AWS AppSync 目前僅支援JSON作為
Content-Type
。 -
queryString
指定常見選項的鍵值對,例如JSON回應的程式碼格式。金鑰與值皆必須為字串。例如,如果您想要取得格式正確的 JSON,您會使用:
"queryString" : { "pretty" : "true" }
-
本文
這是請求的主要部分, 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,請參閱存取請求標頭 。