Amazon CloudSearch
開発者ガイド (API バージョン 2013-01-01)

Amazon CloudSearch での検索リクエストのパフォーマンスのチューニング

検索リクエストの処理には、大量のリソースが消費される可能性があり、検索ドメインのパフォーマンスと実行コストに影響を与えることがあります。一般に、大量のヒット項目を返す検索や複雑な構造化クエリは、検索ドメインのドキュメントが一致する割合が低い単純なテキストクエリよりも多くのリソースを消費します。

応答時間が長く、内部サーバーエラー(507 または 509 エラーが一般的)が頻繁に発生する場合や、検索対象のデータ量の実質的な増加はないにもかかわらず、検索ドメインが消費するインスタンス時間数が増加している場合は、検索リクエストを微調整することで処理のオーバーヘッドを削減できます。このセクションでは、検索リクエストをチューニングするための注意事項とステップについて説明します。

クエリのレイテンシー分析

リクエストをチューニングする前に、現在の検索パフォーマンスを分析する必要があります。検索リクエストと応答時間のログを作成し、処理に最も時間のかかるリクエストを特定します。時間のかかる検索は、検索ドメインのリソースを拘束することで、全体的なパフォーマンスに不釣り合いな影響を与える可能性があります。最も時間のかかる検索リクエストを最適化することで、すべての検索の速度が上がります。

ヒット数の削減

クエリのレイテンシーは、一致するドキュメントの数に正比例します。ほとんどのドキュメントに一致する検索が、一般的には最も遅くなります。

一般的に多数のドキュメントに一致する結果となる 2 種類の検索を削除することで、全体的なパフォーマンスを劇的に改善できます。

  • コーパス内のすべてのドキュメントに一致するクエリ(matchall)。これは、ドメイン内のすべてのドキュメントのリストを作成するには便利な方法ですが、リソースを多用するクエリです。ドキュメントの量が多い場合は、他のリクエストがタイムアウトする原因になるだけでなく、それ自体もタイムアウトする可能性があります。

  • 1~2 文字のみを指定したプレフィックス(ワイルドカード)検索。このタイプの検索を使用して、ユーザーの入力として即時に結果を提供する場合、ユーザーが少なくとも 2 文字入力するのを待ってから、クエリを送信し、可能性のある候補を表示します。

リクエストに一致するドキュメントの数を減らすには、次の操作を行うこともできます。

  • 関係のない単語は、マッチングに使用されないようにコーパスから削除します。最も簡単な方法は、使用している分析スキーマのストップワードリストディクショナリに追加することです。また、データの前処理を行って、無関係の単語を削除することができます。関係のない単語を削除するとインデックスのサイズが縮小されるというメリットもあり、それがコスト削減に繋がる可能性もあります。

  • fq パラメータを使用して、特定のフィールドの値に基づいて結果を明示的にフィルタします。

それでも多数のドキュメントに一致するリクエストがある場合、結果セットに対して行う処理の量を最小化することで、レイテンシーを減らすことができます。

  • リクエストするファセット情報を最小限に抑えます。ファセットカウントの生成により処理に必要な時間が長くなり、他のリクエストがタイムアウトする可能性が高くなります。ファセット情報をリクエストする場合、指定するファセットが多いほど、リクエストの処理時間が長くなります。

  • ソートに独自の式を使用しないようにします。結果のソートに必要な処理が追加されると、リクエストがタイムアウトする可能性が高くなります。結果のソート方法をカスタマイズする必要がある場合は、一般的に式を使用するよりもフィールドを使用する方が時間はかかりません。

検索結果で大量のデータを返すと、転送時間が長くなり、クエリのレイテンシーにも影響します。返すフィールド数を最小にすることで、パフォーマンスを改善し、インデックスのサイズを縮小することができます。

構造化クエリの単純化

クエリ条件の句の数が多いほど、クエリの処理時間が長くなります。

適切に機能しない複雑な構造化クエリがある場合は、句の数を減らす方法を見つける必要があります。場合によっては、制限を設定したり、クエリを再生成できる可能性があります。その他に、より単純なクエリに対応するためにドメイン設定を変更しなければならない場合があります。

このページの内容: