インデックスのクエリ
注記
機能のサポートは、使用されているインデックスタイプと検索 API によって異なります。使用しているインデックスタイプと検索 API でこの機能がサポートされているかどうかを確認するには、インデックスのタイプに関するページを参照してください。
インデックスを検索すると、Amazon Kendra はドキュメントに関して提供したすべての情報を使用して、入力した検索語に最も関連性の高いドキュメントを特定します。Amazon Kendra が考慮する項目には、以下のものがあります。
-
ドキュメントのテキスト (本文)。
-
ドキュメントのタイトル。
-
検索可能としてマークしたカスタムテキストフィールド。
-
指定した日付フィールドは、ドキュメントの「鮮度」を決定するために使用する必要があります。
-
関連情報を提供可能なその他のフィールド。
また、Amazon Kendra は、検索に設定したフィールド/属性フィルターに基づいてレスポンスをフィルタリングできます。例えば、「department」というカスタムフィールドがある場合、「legal」という部門からのドキュメントのみを返すようにレスポンスをフィルタリングできます。詳細については、「Custom fields or attributes」を参照してください。
返された検索結果は、Amazon Kendra によってドキュメントごとに決定する関連性で並び替えられます。結果はページ割りされ、ユーザーにページを一度に表示できます。
Amazon Lex 向けに Amazon Kendra でインデックス付けしたドキュメントを検索するには、AMAZON.KendraSearchIntent を使用します。Amazon Lex による Amazon Kendra の設定の例については、「Creating a FAQ Bot for an Amazon Kendra Index」を参照してください。
次の例は、インデックスの検索方法を示しています。Amazon Kendra は、クエリに最適な検索結果のタイプ (回答、ドキュメント、質問と回答) を決定します。特定のタイプの検索レスポンス (回答、ドキュメント、質問と回答) をクエリに返すように、Amazon Kendra を設定することはできません。
クエリのレスポンスの詳細については、クエリレスポンスとレスポンスタイプ を参照してください。
前提条件
クエリ API を使用してインデックスをクエリする前に、次の操作を行います。
-
インデックスに必要なアクセス許可を設定して、データソースに接続するか、ドキュメントを一括でアップロードします。詳細については、「IAM roles」を参照してください。インデックスとデータソースコネクタを作成するために API を呼び出す場合、ドキュメントを一括でアップロードする場合は、ロールの Amazon リソースネームを使用します。
-
AWS Command Line Interface、SDK のいずれかをセットアップするか、Amazon Kendra コンソールに移動します。詳細についてはAmazon Kendra「のセットアップ」を参照してください。
-
インデックスを作成してドキュメントのデータソースに接続するか、ドキュメントを一括でアップロードします。詳細については、「Creating an index」および「Creating a data source connector」を参照してください。
インデックスの検索 (コンソール)
Amazon Kendra コンソールを使用してインデックスをテストできます。クエリを作成して結果を確認できます。
コンソールでインデックスを検索するには
-
AWS マネジメントコンソール にサインインして Amazon Kendra コンソール (http://console.aws.amazon.com/kendra/
) を開きます。 -
ナビゲーションペインで、[Indexes] (インデックス) をクリックします。
-
インデックスを選択します。
-
ナビゲーションメニューで、インデックスを検索するオプションを選択します。
-
テキストボックスにクエリを入力し、Enter キーを押します。
-
Amazon Kendra は、検索の結果を返します。
また、サイドパネルの電球アイコンを選択すると、検索のクエリ ID を取得できます。
インデックスの検索 (SDK)
Python または Java でインデックスを検索するには
-
次の例では、インデックスを検索します。
queryの値を検索クエリに、index_idまたはindexIdを検索するインデックスのインデックス識別子に変更します。クエリ API を呼び出すと、レスポンス要素の一部として検索のクエリ ID を取得することもできます。
インデックスの検索 (Postman)
Postman
Postman を使用してインデックスを検索するには
-
Postman で新しいコレクションを作成し、リクエストタイプを [POST] に設定します。
-
エンドポイントの URL を入力します。例えば、https://kendra.<region>.amazonaws.com などです。
-
[認可] タブを選択し、次の情報を入力します。
-
[タイプ] - [AWS 署名] を選択します。
-
[AccessKey] - IAM ユーザーの作成時に生成されたアクセスキーを入力します。
-
[SecretKey] - IAM ユーザーの作成時に生成されたシークレットキーを入力します。
-
[AWS リージョン] - インデックスのリージョンを入力します。例えば、us-west-2 などです。
-
[サービス名] - [kendra] と入力します。大文字と小文字を区別するため、小文字にする必要があります。
警告
サービス名を正しく入力しなかった場合や、小文字を使用しなかった場合は、[送信] を選択してリクエストを送信すると、「認証情報の範囲は、正しいサービス「kendra」に限定する必要があります」というエラーが表示されます。
また、正しいアクセスキーとシークレットキーが入力されたことを確認する必要があります。
-
-
[ヘッダー] タブを選択し、次のキーと値の情報を入力します。
-
キー: X-Amz-Target
値: com.amazonaws.kendra.AWSKendraFrontendService.Query
-
キー: Content-Encoding
値: amz-1.0
-
-
[本文] タブを選択し、次の操作を行います。
-
リクエストの本文の 未加工の JSON タイプを選択します。
-
インデックス ID とクエリテキストを含む JSON を入力します。
{ "IndexId": "index-id", "QueryText": "enter a query here" }警告
JSON で正しいインデントが使用されていない場合、「SerializationException」というエラーがスローされます。JSON のインデントを確認してください。
-
-
[送信] (右上付近にあります) を選択します。
高度なクエリ構文による検索
高度なクエリ構文や演算子を使用すると、単純なキーワードクエリや自然言語クエリよりも具体的なクエリを作成できます。これには、範囲、ブール値、ワイルドカードなどが含まれます。演算子を使用すると、クエリにコンテキストを追加して、検索結果をさらに絞り込むことができます。
Amazon Kendra では、次の演算子がサポートされています。
-
プール値: 検索を限定または拡大するロジック。例えば、
amazon AND sportsは、両方の語句を含むドキュメントのみを検索するように検索を限定します。 -
かっこ: ネストされたクエリ語句を優先順に読み取ります。例えば、
(amazon AND sports) NOT rainforestは、NOT rainforestの前に(amazon AND sports)を読み取ります。 -
範囲: 日付または数値の範囲値。範囲は、包含、除外、制限なしのいずれでも構いません。例えば、最終更新日が 2020 年 1 月 1 日から 2020 年 12 月 31 日まで (両端の日付を含む) のドキュメントを検索できます。
-
フィールド: 特定のフィールドを使用して、検索対象を絞り込みます。例えば、「場所」のフィールドに「米国」が含まれるドキュメントを検索できます。
-
ワイルドカード: テキストの文字列との部分一致。例えば、
Cloud*は CloudFormation と一致する可能性があります。Amazon Kendra では現在、末尾のワイルドカードのみがサポートされています。 -
完全一致引用符: テキストの文字列との完全一致。例:
"Amazon Kendra" "pricing"を含むドキュメント。
上のいずれかの演算子を組み合わせて使用できます。
演算子や非常に複雑なクエリを過度に使用すると、クエリのレイテンシーに影響を与える可能性があるので注意してください。ワイルドカードは、レイテンシーの点で非常にコストのかかる演算子の 1 つです。一般的に、使用する語句や演算子が多いほど、レイテンシーへの影響が大きくなります。レイテンシーに影響を与えるその他の要因には、インデックスが作成されたドキュメントの平均サイズ、インデックスのサイズ、検索結果のフィルタリング、Amazon Kendra インデックスの全体的な負荷などがあります。
ブール値
ブール値演算子の AND、OR、NOT を使用して、単語を組み合わせたり、除外したりすることができます。
ブール演算子を使用した例を次に示します。
amazon AND sports
Amazon Prime Video のスポーツまたはその他の類似コンテンツなど、テキストに「amazon」と「sports」の両方の語句を含む検索結果を返します。
sports OR recreation
テキストに「sports」や「recreation」、または両方の語句を含む検索結果を返します。
amazon NOT rainforest
テキストに「amazon」の語句を含むが、「rainforest」の語句は含まない検索結果を返します。これは、アマゾンの熱帯雨林に関するドキュメントではなく、Amazon という会社に関するドキュメントを検索するためのものです。
括弧
かっこを使うと、ネストされた単語を優先順に検索できます。かっこは、クエリの読み方を Amazon Kendra に示しています。
かっこ演算子を使用した例を次に示します。
(amazon AND sports) NOT rainforest
テキストに「amazon」と「sports」の両方の語句を含むが、「rainforest」の語句は含まないドキュメントを返します。これは Amazon Prime Video スポーツまたはその他の類似コンテンツを検索するためのもので、アマゾンの熱帯雨林でのアドベンチャースポーツを検索するためのものではありません。かっこは、NOT rainforest の前に amazon AND sports を読み取る必要があることを示すのに役立ちます。このクエリは amazon
AND (sports NOT rainforest) と読み取るものではありません。
(amazon AND (sports OR recreation)) NOT
rainforest
「sports」や「recreation」、または両方の語句を含む検索結果を返します。ただし、「rainforest」の語句は含まれません。これは Amazon Prime Video スポーツまたはレクリエーションを検索するためのもので、アマゾンの熱帯雨林でのアドベンチャースポーツを検索するためのものではありません。かっこは、sports OR
recreation は「amazon」と組み合わせる前に読み取る必要があり、NOT rainforest の前に読み取る必要があることを示すのに役立ちます。このクエリは amazon AND (sports OR (recreation NOT rainforest)) と読み取るものではありません。
範囲
値の範囲を使用して、検索結果を絞り込むことができます。属性と範囲の値を指定します。日付タイプでも数値タイプでも構いません。
日付範囲は、次の形式になります。
-
Epoch
-
YYYY
-
YYYY-mm
-
YYYY-mm-dd
-
YYYY-mm-dd'T'HH
また、範囲の下限値と上限値を含めるかどうかを指定できます。
範囲演算子を使用した例を次に示します。
_processed_date:>2019-12-31 AND
_processed_date:<2021-01-01
2020 年 (2019 年 12 月 31 日より後で、かつ 2021 年 1 月 1 日より前) に処理されたドキュメントを返します。
_processed_date:>=2020-01-01 AND
_processed_date:<=2020-12-31
2020 年 (2020 年 1 月 1 日から 2020 年 12 月 31 日まで (両端の日付を含む)) に処理されたドキュメントを返します。
_document_likes:<1
「いいね」がゼロまたはユーザーからのフィードバックがない、つまり「いいね」が 1 件未満のドキュメントを返します。
ある範囲を、指定した範囲の値を含むものとして扱うのか、含まないものとして扱うのかを指定できます。
包含
_last_updated_at:[2020-01-01 TO
2020-12-31]
最終更新日が 2020 年のドキュメントを返します。これには 2020 年 12 月 1 日と 2020 年 12 月 31 日が含まれます。
除外
_last_updated_at:{2019-12-31 TO
2021-01-01}
最終更新日が 2020 年のドキュメントを返します。これには 2019 年 12 月 31 日と 2021 年 1 月 1 日は含まれません。
包含または除外ではなく、制限なしの範囲の場合は、< and > 演算子を使用します。例えば、_last_updated_at:>2019-12-31 AND
_last_updated_at:<2021-01-01。
フィールド
特定のフィールドの値と一致するドキュメントのみを返すように検索を限定できます。フィールドは、任意のタイプに指定できます。
フィールドレベルのコンテキスト演算子の使用例を次に示します。
status:"Incomplete" AND
financial_year:2021
会計年度が 2021 年のドキュメントで、ステータスが未完了のものを返します。
(sports OR recreation) AND country:"United
States" AND level:"professional"
米国内のプロスポーツまたはレクリエーションに関するドキュメントを返します。
ワイルドカード
ワイルドカード演算子を使用すると、単語やフレーズのバリエーションを考慮して検索範囲を広げることができます。これは、名前のバリエーションを検索する場合に便利です。Amazon Kendra では現在、末尾のワイルドカードのみがサポートされています。末尾のワイルドカードのプレフィックス文字の数は 2 文字以上である必要があります。
ワイルドカード演算子を使用した例を次に示します。
Cloud*
CloudFormation や CloudWatch などのバリアントを含むドキュメントを返します。
kendra*aws
kendra.amazonaws などのバリアントを含むドキュメントを返します。
kendra*aws*
kendra.amazonaws.com などのバリアントを含むドキュメントを返します。
完全一致引用符
引用符を使用すると、テキストの一部と完全に一致するものを検索できます。
引用符の使用例を次に示します。
"Amazon Kendra" "pricing"
「Amazon Kendra」と「pricing」の両方の語句を含むドキュメントを返します。結果を返すには、ドキュメント「Amazon Kendra」と「pricing」の両方が含まれている必要があります。
"Amazon Kendra" "pricing"
cost
「Amazon Kendra」と「pricing」の両方の語句を含み、オプションで「cost」の語句を含むドキュメントを返します。結果を返すには、ドキュメント「Amazon Kendra」と「pricing」の両方が含まれている必要がありますが、「cost」は含まれていない場合もあります。
無効なクエリ構文
クエリ構文に問題がある場合や、クエリが現在 Amazon Kendra でサポートされていない場合は、Amazon Kendra は警告を表示します。詳細については、「API documentation for query warnings」を参照してください。
次のクエリは、無効なクエリ構文の例です。
_last_updated_at:<2021-12-32
無効な日付です。32 日は、Amazon Kendra が使用しているグレゴリオ暦には存在しません。
_view_count:ten
無効な数値です。数値を表すには、数字を使用する必要があります。
nonExistentField:123
無効なフィールド検索です。フィールド検索を使用するには、そのフィールドが存在している必要があります。
Product:[A TO D]
無効な範囲です。範囲には、数値または日付を使用する必要があります。
OR Hello
無効なブール値です。演算子は語句と一緒に使用し、語句の間に記述する必要があります。
各言語での検索
サポートされている言語でドキュメントを検索できます。[AttributeFilter] の言語コードを渡して、選択した言語でフィルタリングされたドキュメントを返すことができます。クエリは、サポートされている言語で入力できます。
言語を指定しない場合、Amazon Kendra はデフォルトで、英語でドキュメントをクエリします。コードを含む、サポートされている言語の詳細については、英語以外の言語でドキュメントを追加するを参照してください。
サポートされている言語のドキュメントをコンソールで検索するには、インデックスを選択し、ナビゲーションメニューから、インデックスを検索するオプションを選択します。[検索設定] を選択して、ドキュメントを返す言語を選択します。次にドロップダウンの [言語] から言語を選択します。
次の例では、スペイン語でドキュメントを検索する方法を示しています。
コンソールでスペイン語のインデックスを検索するには
-
AWS マネジメントコンソール にサインインして Amazon Kendra コンソール (http://console.aws.amazon.com/kendra/
) を開きます。 -
ナビゲーションメニューで、[インデックス] を選択し、目的のインデックスを選択します。
-
ナビゲーションメニューで、インデックスを検索するオプションを選択します。
-
[検索設定] で、[言語] ドロップダウンを選択し、スペイン語を選択します。
-
テキストボックスにクエリを入力し、Enter キーを押します。
-
Amazon Kendra は、検索結果をスペイン語で返します。
CLI、Python または Java を使用してインデックスをスペイン語で検索するには
-
次の例では、インデックスをスペイン語で検索します。
searchStringの値を検索クエリに、indexIDの値を検索するインデックスのインデックス識別子に変更します。スペイン語の言語コードはesです。これを独自の言語コードに置き換えることができます。