

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將搜尋請求提交至 Amazon CloudSearch 網域
<a name="submitting-search-requests"></a>

建議使用其中一個 AWS SDKs或 AWS CLI 來提交搜尋請求。SDKs和 會為您 AWS CLI 處理請求簽署，並提供執行所有 Amazon CloudSearch 動作的簡單方法。您也可以使用 Amazon CloudSearch 主控台中的搜尋測試器來搜尋您的資料、瀏覽結果，以及檢視產生的請求 URLs和 JSON 和 XML 回應。如需詳細資訊，請參閱[使用搜尋測試器進行搜尋](getting-started-search.md#searching-console)。

**重要**  
搜尋端點不會變更：網域的文件和搜尋端點在網域的生命週期內保持不變。應當對端點進行快取處理，而非在每次上傳或搜尋請求之前擷取端點。在每次請求可能導致您的請求受到調節`DescribeDomains`之前，透過呼叫 `aws cloudsearch describe-domains`或 查詢 Amazon CloudSearch 組態服務。
IP 地址**確實**會變更：您網域的 IP 地址*可能會*隨著時間而變更，因此快取端點很重要，如主控台所示，並由 `aws cloudsearch describe-domains`命令傳回，而不是 IP 地址。您也應該定期將端點 DNS 重新解析為 IP 地址。如需詳細資訊，請參閱[設定 DNS 名稱查詢的 JVM TTL](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/java-dg-jvm-ttl.html)。

例如，以下請求`wolverine`會使用 提交 的簡單文字搜尋， AWS CLI 並只傳回相符文件IDs。

```
aws cloudsearchdomain --endpoint-url http://search-movies-y6gelr4lv3jeu4rvoelunxsl2e.us-east-1.cloudsearch.amazonaws.com search --search-query wolverine  --return _no_fields
{
    "status": {
        "rid": "/rnE+e4oCAqfEEs=", 
        "time-ms": 6
    }, 
    "hits": {
        "found": 3, 
        "hit": [
            {
                "id": "tt1430132"
            }, 
            {
                "id": "tt0458525"
            }, 
            {
                "id": "tt1877832"
            }
        ], 
        "start": 0
    }
}
```

根據預設，Amazon CloudSearch 會以 JSON 傳回回應。您可以指定 `format` 參數，以取得 XML 格式的結果。回應格式的設定僅會影響到對於成功請求的回應。錯誤回應的格式取決於錯誤的源頭。搜尋服務傳回的錯誤一律會在 JSON 中傳回。由於伺服器逾時和其他請求路由問題而導致的 5xx 錯誤會以 XML 傳回。

**注意**  
AWS SDKs會以陣列的形式傳回欄位。單一值欄位會傳回為具有一個元素的陣列，例如：  

```
"fields": {
  "plot": ["Katniss Everdeen reluctantly becomes the symbol of a mass rebellion against the autocratic Capitol."]
}
```

為了開發和測試目的，您可以允許匿名存取網域的搜尋服務，並將未簽署的 HTTP GET 或 POST 請求直接提交至網域的搜尋端點。在生產環境中，將對您網域的存取限制為特定 IAM 角色、群組或使用者，並使用 AWS SDKs或 提交簽署的請求 AWS CLI。如需有關控制 Amazon CloudSearch 存取的資訊，請參閱 [設定 Amazon CloudSearch 的存取](configuring-access.md)。如需請求簽署的詳細資訊，請參閱[簽署 AWS API 請求](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html)。

您可以使用任何您想要將 HTTP 請求直接傳送到網域搜尋端點的方法：您可以直接在 Web 瀏覽器中輸入請求 URL、使用 cURL 提交請求，或使用您最愛的 HTTP 程式庫產生 HTTP 呼叫。若要指定搜尋條件，您可以指定查詢字串，指定搜尋的限制條件，以及您要在回應中傳回的內容。查詢字串必須以 URL 編碼。透過 GET 提交的搜尋請求大小上限為 8190 個位元組，包括 HTTP 方法、URI 和通訊協定版本。您可以使用 HTTP POST 提交較大的請求；不過，請記住，大型、複雜的請求需要更長的時間來處理，而且更有可能逾時。如需詳細資訊，請參閱[在 Amazon CloudSearch 中調整搜尋請求效能](tuning-search.md)。

例如，以下請求會將結構化查詢提交至`search-movies-rr2f34ofg56xneuemujamut52i.us-east-1.cloudsearch.amazonaws.com`網域，並取得 `title` 欄位的內容。

```
http://search-movies-rr2f34ofg56xneuemujamut52i.us-east-1.cloudsearch.
amazonaws.com/2013-01-01/search?q=(and+(term+field%3Dtitle+'star')
(term+field%3Dyear+1977))&q.parser=structured&return=title
```

**重要**  
查詢字串中的特殊字元必須以 URL 編碼。例如，您必須在結構化查詢中將`=`運算子編碼為 `%3D`：`(term+field%3Dtitle+'star')`。如果您在提交搜尋請求時未編碼特殊字元，則會收到`InvalidQueryString`錯誤。