インデックスのクエリ - Amazon Kendra

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

インデックスのクエリ

インデックスを検索すると、 はドキュメントに関して指定したすべての情報 Amazon Kendra を使用して、入力した検索語に最も関連性の高いドキュメントを決定します。が Amazon Kendra 考慮する項目の一部は次のとおりです。

  • ドキュメントのテキスト (本文)。

  • ドキュメントのタイトル。

  • 検索可能としてマークしたカスタムテキストフィールド。

  • 指定した日付フィールドは、ドキュメントの「鮮度」を決定するために使用する必要があります。

  • 関連情報を提供可能なその他のフィールド。

Amazon Kendra は、検索用に設定したフィールド/属性フィルターに基づいてレスポンスをフィルタリングすることもできます。例えば、「department」というカスタムフィールドがある場合、「legal」という部門からのドキュメントのみを返すようにレスポンスをフィルタリングできます。詳細については、「Custom fields or attributes」を参照してください。

返される検索結果は、 が各ドキュメントについて Amazon Kendra 決定した関連性でソートされます。結果はページ割りされ、ユーザーにページを一度に表示できます。

インデックスを作成したドキュメントを Amazon Kendra で検索するには Amazon Lex、AMAZON を使用しますKendraSearchIntent。で を設定する Amazon Kendra 例については Amazon Lex、Amazon Kendra 「インデックス のよくある質問ボットの作成」を参照してください。

次の例は、クエリに最適な検索結果のタイプ (回答、ドキュメント、質問応答) を index. Amazon Kendra determines で検索する方法を示しています。特定のタイプの検索レスポンス (応答、ドキュメント、質問応答) 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 コンソールを使用して、インデックスを検索およびテストできます。クエリを作成して結果を確認できます。

コンソールでインデックスを検索するには
  1. にサインイン AWS Management Console し、http://console.aws.amazon.com/kendra/ でコンソールを開きます Amazon Kendra 。

  2. ナビゲーションペインで、[Indexes] (インデックス) をクリックします。

  3. インデックスを選択します。

  4. ナビゲーションメニューで、インデックスを検索するオプションを選択します。

  5. テキストボックスにクエリを入力し、Enter キーを押します。

  6. Amazon Kendra は検索の結果を返します。

また、サイドパネルの電球アイコンを選択すると、検索のクエリ ID を取得できます。

インデックスの検索 (SDK)

Python または Java でインデックスを検索するには
  • 次の例では、インデックスを検索します。query の値を検索クエリに、index_id または indexId を検索するインデックスのインデックス識別子に変更します。

    クエリ API を呼び出すと、レスポンス要素の一部として検索のクエリ ID を取得することもできます。

    Python
    import boto3 import pprint kendra = boto3.client("kendra") # Provide the index ID index_id = "index-id" # Provide the query text query = "query text" response = kendra.query( QueryText = query, IndexId = index_id) print("\nSearch results for query: " + query + "\n") for query_result in response["ResultItems"]: print("-------------------") print("Type: " + str(query_result["Type"])) if query_result["Type"]=="ANSWER" or query_result["Type"]=="QUESTION_ANSWER": answer_text = query_result["DocumentExcerpt"]["Text"] print(answer_text) if query_result["Type"]=="DOCUMENT": if "DocumentTitle" in query_result: document_title = query_result["DocumentTitle"]["Text"] print("Title: " + document_title) document_text = query_result["DocumentExcerpt"]["Text"] print(document_text) print("------------------\n\n")
    Java
    package com.amazonaws.kendra; import software.amazon.awssdk.services.kendra.KendraClient; import software.amazon.awssdk.services.kendra.model.QueryRequest; import software.amazon.awssdk.services.kendra.model.QueryResponse; import software.amazon.awssdk.services.kendra.model.QueryResultItem; public class SearchIndexExample { public static void main(String[] args) { KendraClient kendra = KendraClient.builder().build(); String query = "query text"; String indexId = "index-id"; QueryRequest queryRequest = QueryRequest .builder() .queryText(query) .indexId(indexId) .build(); QueryResponse queryResponse = kendra.query(queryRequest); System.out.println(String.format("\nSearch results for query: %s", query)); for(QueryResultItem item: queryResponse.resultItems()) { System.out.println("----------------------"); System.out.println(String.format("Type: %s", item.type())); switch(item.type()) { case QUESTION_ANSWER: case ANSWER: String answerText = item.documentExcerpt().text(); System.out.println(answerText); break; case DOCUMENT: String documentTitle = item.documentTitle().text(); System.out.println(String.format("Title: %s", documentTitle)); String documentExcerpt = item.documentExcerpt().text(); System.out.println(String.format("Excerpt: %s", documentExcerpt)); break; default: System.out.println(String.format("Unknown query result type: %s", item.type())); } System.out.println("-----------------------\n"); } } }

インデックスの検索 (Postman)

Postman を使用してインデックスをクエリおよびテストできます Amazon Kendra 。

Postman を使用してインデックスを検索するには
  1. Postman で新しいコレクションを作成し、リクエストタイプを [POST] に設定します。

  2. エンドポイントの URL を入力します。例えば、https://kendra.<region>.amazonaws.com などです。

  3. [認証] タブを選択し、次の情報を入力します。

    • [タイプ] - [AWS 署名] を選択します。

    • AccessKey— IAM ユーザーの作成時に生成されたアクセスキーを入力します。

    • SecretKey— IAM ユーザーの作成時に生成されたシークレットキーを入力します。

    • AWS リージョン — インデックスのリージョンを入力します。例えば、us-west-2 などです。

    • [サービス名] - [kendra] と入力します。大文字と小文字を区別するため、小文字にする必要があります。

      警告

      サービス名を正しく入力しなかった場合や、小文字を使用しなかった場合は、[送信] を選択してリクエストを送信すると、「認証情報の範囲は、正しいサービス「kendra」に限定する必要があります」というエラーが表示されます。

      また、正しいアクセスキーとシークレットキーが入力されたことを確認する必要があります。

  4. [ヘッダー] タブを選択し、次のキーと値の情報を入力します。

    • キー: X-Amz-Target

      値: com.amazonaws.kendraAWSKendraFrontendService。クエリ

    • キー: Content-Encoding

      値: amz-1.0

  5. [本文] タブを選択し、次の操作を行います。

    • リクエストの本文の 未加工の JSON タイプを選択します。

    • インデックス ID とクエリテキストを含む JSON を入力します。

      { "IndexId": "index-id", "QueryText": "enter a query here" }
      警告

      JSON が正しいインデンドを使用しない場合、エラー「」がスローされますSerializationException。JSON のインデントを確認してください。

  6. [送信] (右上付近にあります) を選択します。

高度なクエリ構文による検索

高度なクエリ構文や演算子を使用すると、単純なキーワードクエリや自然言語クエリよりも具体的なクエリを作成できます。これには、範囲、ブール値、ワイルドカードなどが含まれます。演算子を使用すると、クエリにコンテキストを追加して、検索結果をさらに絞り込むことができます。

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 インデックスの全体的な負荷などがあります。

ブール値

ブール値演算子の ANDORNOT を使用して、単語を組み合わせたり、除外したりすることができます。

ブール演算子を使用した例を次に示します。

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 クエリします。コードを含む、サポートされている言語の詳細については、英語以外の言語でドキュメントを追加するを参照してください。

サポートされている言語のドキュメントをコンソールで検索するには、インデックスを選択し、ナビゲーションメニューから、インデックスを検索するオプションを選択します。[検索設定] を選択して、ドキュメントを返す言語を選択します。次にドロップダウンの [言語] から言語を選択します。

次の例では、スペイン語でドキュメントを検索する方法を示しています。

コンソールでスペイン語のインデックスを検索するには
  1. にサインイン AWS Management Console し、http://console.aws.amazon.com/kendra/ でコンソールを開きます Amazon Kendra 。

  2. ナビゲーションメニューで、[インデックス] を選択し、目的のインデックスを選択します。

  3. ナビゲーションメニューで、インデックスを検索するオプションを選択します。

  4. [検索設定] で、[言語] ドロップダウンを選択し、スペイン語を選択します。

  5. テキストボックスにクエリを入力し、Enter キーを押します。

  6. Amazon Kendra は、検索結果をスペイン語で返します。

CLI、Python または Java を使用してインデックスをスペイン語で検索するには
  • 次の例では、インデックスをスペイン語で検索します。searchString の値を検索クエリに、indexID の値を検索するインデックスのインデックス識別子に変更します。スペイン語の言語コードは es です。これを独自の言語コードに置き換えることができます。

    CLI
    { "EqualsTo":{ "Key": "_language_code", "Value": { "StringValue": "es" } } }
    Python
    import boto3 import pprint kendra = boto3.client("kendra") # Provide the index ID index_id = "index-id" # Provide the query text query = "search-string" # Includes the index ID, query text, and language attribute filter response = kendra.query( QueryText = query, IndexId = index_id, AttributeFilter = { "EqualsTo": { "Key": "_language_code", "Value": { "StringValue": "es" } } }) print ("\nSearch results|Resultados de la búsqueda: " + query + "\n") for query_result in response["ResultItems"]: print("-------------------") print("Type: " + str(query_result["Type"])) if query_result["Type"]=="ANSWER" or query_result["Type"]=="QUESTION_ANSWER": answer_text = query_result["DocumentExcerpt"]["Text"] print(answer_text) if query_result["Type"]=="DOCUMENT": if "DocumentTitle" in query_result: document_title = query_result["DocumentTitle"]["Text"] print("Title: " + document_title) document_text = query_result["DocumentExcerpt"]["Text"] print(document_text) print("------------------\n\n")
    Java
    package com.amazonaws.kendra; import software.amazon.awssdk.services.kendra.KendraClient; import software.amazon.awssdk.services.kendra.model.QueryRequest; import software.amazon.awssdk.services.kendra.model.QueryResponse; import software.amazon.awssdk.services.kendra.model.QueryResultItem; public class SearchIndexExample { public static void main(String[] args) { KendraClient kendra = KendraClient.builder().build(); String query = "searchString"; String indexId = "indexID"; QueryRequest queryRequest = QueryRequest.builder() .queryText(query) .indexId(indexId) .attributeFilter( AttributeFilter.builder() .withEqualsTo( DocumentAttribute.builder() .withKey("_language_code") .withValue("es") .build()) .build()) .build(); QueryResponse queryResponse = kendra.query(queryRequest); System.out.println(String.format("\nSearch results| Resultados de la búsqueda: %s", query)); for(QueryResultItem item: queryResponse.resultItems()) { System.out.println("----------------------"); System.out.println(String.format("Type: %s", item.type())); switch(item.type()) { case QUESTION_ANSWER: case ANSWER: String answerText = item.documentExcerpt().text(); System.out.println(answerText); break; case DOCUMENT: String documentTitle = item.documentTitle().text(); System.out.println(String.format("Title: %s", documentTitle)); String documentExcerpt = item.documentExcerpt().text(); System.out.println(String.format("Excerpt: %s", documentExcerpt)); break; default: System.out.println(String.format("Unknown query result type: %s", item.type())); } System.out.println("-----------------------\n"); } } }