

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon CloudSearch ドメインへの検索リクエストの送信
<a name="submitting-search-requests"></a>

検索リクエストを送信するには、AWS SDKs のいずれかまたは AWS CLI を使用することをお勧めします。SDKsと はリクエスト署名 AWS CLI を処理し、すべての Amazon CloudSearch アクションを実行する簡単な方法を提供します。Amazon CloudSearch コンソールの検索テスターを使用して、データの検索、結果の参照、生成されたリクエスト URL、JSON および XML レスポンスの表示を行うことができます。詳細については、「[検索テスターによる検索](getting-started-search.md#searching-console)」を参照してください。

**重要**  
検索エンドポイントは変わりません。ドメインのドキュメントエンドポイントと検索エンドポイントは、ドメインが存在している間変わりません。すべてのアップロードリクエストや検索リクエストの前にエンドポイントを取得するのではなく、エンドポイントをキャッシュに保存してください。各リクエストの前に `aws cloudsearch describe-domains` または `DescribeDomains` を呼び出すことによって Amazon CloudSearch 設定サービスにクエリを実行すると、リクエストが調整される可能性があります。
IP アドレスは**変わります**。ドメインの IP アドレスは、時間の経過とともに*変化する*ので、コンソールに表示されるようにエンドポイントをキャッシュし、IP アドレスではなく、`aws cloudsearch describe-domains` コマンドによって返されるようにすることが重要です。また、エンドポイント 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 SDK はフィールドを配列として返します。単一値フィールドは、次のような 1 つの要素を持つ配列として返されます。  

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

開発およびテストの目的では、ドメインの検索サービスへの匿名アクセスを許可し、署名のない HTTP GET または POST リクエストをドメインの検索エンドポイントに直接送信できます。実稼働環境では、ドメインへのアクセスを特定の IAM ロール、グループ、またはユーザーに制限し、AWS SDK または 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 リクエストをドメインの検索エンドポイントに直接送信する任意のメソッドを使用できます。ウェブブラウザにリクエスト URL を直接入力したり、cURL を使用してリクエストを送信したり、お気に入りの HTTP ライブラリを使用して HTTP 呼び出しを生成したりできます。検索条件を指定するには、検索の制約とレスポンスで戻す内容を指定するクエリ文字列を指定します。クエリ文字列は、URL エンコードされている必要があります。GET 経由で送信される検索リクエストの最大サイズは、HTTP メソッド、URI、プロトコルのバージョンを含め 8190 バイトです。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` というエラーが表示されます。