クエリの提案 - Amazon Kendra

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

クエリの提案

注記

機能のサポートは、インデックスタイプと使用する検索APIによって異なります。この機能が、使用しているインデックスタイプと検索APIでサポートされているかどうかを確認するには、「インデックスタイプ」を参照してください。

Amazon Kendra の [クエリの提案] は、ユーザーが検索クエリをより速く入力し、検索をガイドするのに役立ちます。

Amazon Kendra は、次のいずれかに基づいてユーザーに関連するクエリを提案します。

  • クエリ履歴またはクエリログでよく使われるクエリ

  • ドキュメントフィールド/属性の内容

QUERYまたは SuggestionTypes として設定DOCUMENT_ATTRIBUTESし、 を呼び出すことで、クエリ履歴またはドキュメントフィールドを使用するように設定できます。 GetQuerySuggestions。 デフォルトでは、 はクエリ履歴 Amazon Kendra を使用して提案に基づいています。を呼び出すときにクエリ履歴フィールドとドキュメントフィールドの両方がアクティブ化されている場合 UpdateQuerySuggestionsConfig ドキュメントフィールドを使用するSuggestionTypesように設定していない場合、 はクエリ履歴 Amazon Kendra を使用します。

コンソールを使用すると、クエリの提案をクエリ履歴またはドキュメントフィールドのいずれかに基づくことができます。最初にインデックスを選択し、ナビゲーションメニューの [エンリッチメント][クエリの提案] を選択します。次に、[クエリの提案の設定] を選択します。クエリの提案を設定すると、検索コンソールが表示され、右側のパネルで [クエリ履歴] または [ドキュメントフィールド] のいずれかを選択すると、検索バーに検索クエリを入力できます。

デフォルトでは、クエリ履歴とドキュメントフィールドを使用したクエリの提案、はどちらも追加料金なしで有効化されています。これらのタイプのクエリ提案は、 API UpdateQuerySuggestionsConfig を使用していつでも無効にできます。クエリ履歴に基づくクエリの提案を無効にするには、UpdateQuerySuggestionsConfig を呼び出す際に ModeDISABLED に設定します。ドキュメントフィールドに基づくクエリの提案を無効にするには、ドキュメントフィールド設定で AttributeSuggestionsModeINACTIVE に設定し、次に UpdateQuerySuggestionsConfig> を呼び出します。コンソールを使用している場合は、[クエリの提案の設定] でクエリの提案を無効にできます。

クエリの提案では大文字と小文字は区別されません。 は、クエリプレフィックスと提案されたクエリを小文字 Amazon Kendra に変換し、すべての一重引用符と二重引用符を無視して、複数の空白文字を 1 つのスペースに置き換えます。 Amazon Kendra は、他のすべての特殊文字をそのまま使用します。ユーザーが 2 文字未満または 60 文字を超えると、提案は表示 Amazon Kendra されません。

クエリ履歴を使用したクエリの提案

注記

機能のサポートは、インデックスタイプと使用する検索APIによって異なります。この機能が、使用しているインデックスタイプと検索APIでサポートされているかどうかを確認するには、「インデックスタイプ」を参照してください。

クエリ履歴またはクエリログの一般的なクエリに基づいて、ユーザーに関連するクエリを提案することを選択できます。 は、ユーザーが検索し、これらのクエリから学習するすべてのクエリ Amazon Kendra を使用して、ユーザーに提案を行います。 は、クエリの入力を開始するときに、ユーザーに一般的なクエリ Amazon Kendra を提案します。 は、クエリのプレフィックスまたは最初の数文字が、ユーザーがクエリとして入力し始めたものと一致する場合に、クエリ Amazon Kendra を提案します。

例えば、ユーザーが「upcoming events」というクエリの入力を開始したとします。 Amazon Kendra はクエリ履歴から、多くのユーザーが「upcoming events 2050」を何度も検索していることを学習します。検索バーの真下に「upcoming events 2050」が表示され、検索クエリが自動入力されます。ユーザーがこのクエリの提案を選択すると、検索結果に「New events: What's happening in 2050」というドキュメントが表示されます。

がユーザーに提案する適格なクエリ Amazon Kendra を選択する方法を指定できます。たとえば、クエリの提案が少なくとも 10 人の一意のユーザー (デフォルトは 3) によって検索され、過去 30 日以内に検索され、ブロックリストからの単語やフレーズが含まれていないことを指定できます。 Amazon Kendra は、クエリに少なくとも 1 つの検索結果があり、4 文字を超える単語が少なくとも 1 つ含まれている必要があります。

提案用のクエリを選択するための設定

を使用して、提案のクエリを選択するために次の設定を構成できます。 UpdateQuerySuggestionsConfig API:

  • モード - クエリ履歴を使用するクエリの低名は、ENABLED または LEARN_ONLY のいずれかです。 Amazon Kendra は、デフォルトでクエリの提案を有効にします。LEARN_ONLY は、クエリの提案を無効にします。オフにすると、提案を学習し Amazon Kendra 続けますが、ユーザーにクエリ提案を行いません。

  • クエリログの期間 - クエリログの期間内で表示された最新のクエリ。タイムウィンドウは、現在の日から過去の日までの日数の整数値です。

  • ユーザー情報のないクエリ - TRUE に設定し、すべてのクエリを含めるか、FALSE に設定してユーザー情報を含むクエリのみを含めます。この設定は、ユーザーがクエリを発行したときに、検索アプリケーションにユーザー ID などのユーザー情報が含まれている場合に使用できます。この設定は、デフォルトではクエリに関連する特定のユーザー情報がない場合、クエリをフィルタリングしません。ただし、この設定を使用して、ユーザー情報を含むクエリに基づく提案のみを行うことができます。

  • 一意のユーザー - ユーザーに的確な提案をするために、クエリを検索する必要がある一意のユーザーの最小数。この数値は整数値です。

  • クエリ数 - ユーザーに的確な提案をするために、クエリを検索する必要がある最小検索回数。この数値は整数値です。

これらの設定は、ユーザーに提案する一般的なクエリとしてクエリを選択する方法に影響します。設定の調整方法は、特定のニーズによって異なります。以下に例を挙げます。

  • 通常、ユーザーが平均月 1 回検索する場合、クエリログ期間の日数を 30 に設定できます。この設定を使用すると、期間の中で陳腐化する前に、ユーザーの最近のクエリのほとんどをキャプチャできます。

  • ユーザー情報を含むクエリの数が少なく、少ないサンプル数に基づいてクエリを提案しない場合は、すべてのユーザーを含むようにクエリを設定できます。

  • [popular queries] (人気のあるクエリ) を 10 人以上のユニークユーザーに 100 回以上検索されたものと定義する場合は、ユニークユーザーを 10、クエリ数を 100 に設定します。

警告

設定の変更はすぐには反映されない場合があります。設定の変更は、 を使用して追跡できます。 DescribeQuerySuggestionsConfig API。更新した設定が有効になるまでの時間は、更新した内容やインデックス内の検索クエリの数によって異なります。 Amazon Kendra は、設定を変更した後、またはブロックリストを適用した後、24 時間ごとに自動的に提案を更新します。

CLI

クエリの提案を取得するには

aws kendra get-query-suggestions \ --index-id index-id \ --query-text "query-text" \ --suggestion-types '["QUERY"]' \ --max-suggestions-count 1 // If you want to limit the number of suggestions

クエリの提案を更新するには

例えば、クエリログタイムウィンドウと、クエリを検索する必要がある最小回数を変更するには、以下の操作を行います。

aws kendra update-query-suggestions-config \ --index-id index-id \ --query-log-look-back-window-in-days 30 \ --minimum-query-count 100
Python

クエリの提案を取得するには

import boto3 from botocore.exceptions import ClientError kendra = boto3.client("kendra") print("Get query suggestions.") # Provide the index ID index_id = "index-id" # Provide the query text query_text = "query" # Provide the query suggestions type query_suggestions_type = "QUERY" # If you want to limit the number of suggestions num_suggestions = 1 try: query_suggestions_response = kendra.get_query_suggestions( IndexId = index_id, QueryText = query_text, SuggestionTypes = query_suggestions_type, MaxSuggestionsCount = num_suggestions ) # Print out the suggestions you received if ("Suggestions" in query_suggestions_response.keys()) { for (suggestion: query_suggestions_response["Suggestions"]) { print(suggestion["Value"]["Text"]["Text"]); } } except ClientError as e: print("%s" % e) print("Program ends.")

クエリの提案を更新するには

例えば、クエリログタイムウィンドウと、クエリを検索する必要がある最小回数を変更するには、以下の操作を行います。

import boto3 from botocore.exceptions import ClientError import pprint import time kendra = boto3.client("kendra") print("Updating query suggestions settings/configuration for an index.") # Provide the index ID index_id = "index-id" # Configure the settings you want to update minimum_query_count = 100 query_log_look_back_window_in_days = 30 try: kendra.update_query_suggestions_config( IndexId = index_id, MinimumQueryCount = minimum_query_count, QueryLogLookBackWindowInDays = query_log_look_back_window_in_days ) print("Wait for Amazon Kendra to update the query suggestions.") while True: # Get query suggestions description of settings/configuration query_sugg_config_response = kendra.describe_query_suggestions_config( IndexId = index_id ) # If status is not UPDATING, then quit status = query_sugg_config_response["Status"] print(" Updating query suggestions config. Status: " + status) if status != "UPDATING": break time.sleep(60) except ClientError as e: print("%s" % e) print("Program ends.")

クエリ履歴を保持したままで提案を消去する

注記

機能のサポートは、インデックスタイプと使用する検索APIによって異なります。この機能が、使用しているインデックスタイプと検索APIでサポートされているかどうかを確認するには、「インデックスタイプ」を参照してください。

を使用してクエリの提案をクリアできます。 ClearQuerySuggestions API。提案をクリアすると、既存のクエリ提案のみが削除されます。クエリ履歴内のクエリは削除されません。提案をクリアすると、 は提案をクリアした時点からクエリログに追加された新しいクエリに基づいて、新しい提案を Amazon Kendra 学習します。

CLI

クエリの提案を消去するには

aws kendra clear-query-suggestions \ --index-id index-id
Python

クエリの提案を消去するには

import boto3 from botocore.exceptions import ClientError kendra = boto3.client("kendra") print("Clearing out query suggestions for an index.") # Provide the index ID index_id = "index-id" try: kendra.clear_query_suggestions( IndexId = index_id ) # Confirm last cleared date-time and that there are no suggestions query_sugg_config_response = kendra.describe_query_suggestions_config( IndexId = index_id ) print("Query Suggestions last cleared at: " + str(query_sugg_config_response["LastClearTime"])); print("Number of suggestions available from the time of clearing: " + str(query_sugg_config_response["TotalSuggestionsCount"])); except ClientError as e: print("%s" % e) print("Program ends.")

提案がありません。

クエリの提案が表示されない場合は、次のいずれかの理由が考えられます。

  • が学習 Amazon Kendra するのに十分なクエリがインデックスにありません。

  • クエリの提案の設定が厳しすぎるため、ほとんどのクエリが提案から除外されています。

  • 最近提案をクリアした Amazon Kendra が、新しい提案を学習するために新しいクエリが蓄積されるまでに時間がかかる。

現在の設定は、 を使用して確認できます。 DescribeQuerySuggestionsConfig API.

ドキュメントフィールドを使用したクエリの提案

ドキュメントフィールドの内容に基づいて、ユーザーに関連するクエリの提案を選択できます。クエリ履歴を使用して他の一般的な関連クエリを提案する代わりに、ドキュメントフィールドに含まれる情報を使用できます。これは、クエリの自動入力に役立ちます。 は、 に設定Suggestableされ、ユーザーのクエリと密接に一致するフィールド内の関連コンテンツ Amazon Kendra を検索します。次に、 は、ユーザーがクエリの入力を開始したときに、このコンテンツをユーザーに Amazon Kendra 提案します。

例えば、提案の基になるタイトルフィールドを指定し、ユーザーがクエリ「How amazon ken...」の入力を開始した場合、最も関連性の高いタイトル「How Amazon Kendra works」を提案して検索を自動入力できます。検索バーのすぐ下に Amazon Kendra 「仕組み」が表示され、検索クエリが自動入力されます。ユーザーがこのクエリ提案を選択すると、ドキュメント「How Amazon Kendra works」が検索結果に返されます。

クエリの提案のためのフィールド設定の一部として、フィールドを Suggestable に設定することにより、String および StringList のタイプのドキュメントフィールドの内容を使用してクエリを提案できます。ブロックリストを使用して、特定の語句が含まれるドキュメントフィールドの提案をユーザーに表示しないようにすることもできます。ブロックリストは 1 つしか使用できません。ブロックリストは、クエリの提案にクエリ履歴、またはドキュメント文書フィールドのどちらを使用するように設定したかにかかわらず適用されます。

提案用のフィールドを選択するための設定

を使用して、提案するドキュメントフィールドを選択するために次の設定を構成できます。 AttributeSuggestionsConfig と の呼び出し UpdateQuerySuggestionsConfig インデックスレベルで設定を更新するAPI:

  • フィールド/属性提案モード - ドキュメントフィールドを使用するクエリの提案は、ACTIVE または INACTIVE のいずれかです。 Amazon Kendra では、デフォルトでクエリの提案を有効にします。

  • 提案が可能なフィールド/属性 - 提案の基になるフィールド名またはフィールドキー。これらのフィールドは、フィールド設定の一部として Suggestable の場合は TRUE に設定する必要があります。インデックスレベルでは設定を維持したまま、クエリレベルではフィールドの設定をオーバーライドできます。GetQuerySuggestions API を使用して、クエリレベルで変更AttributeSuggestionConfigします。このクエリレベルの設定は、インデックスレベルで設定を更新しなくても、異なるドキュメントフィールドをすばやく試用するのに便利です。

  • 追加フィールド/属性 - クエリの提案のレスポンスに含める追加フィールド。これらのフィールドは、レスポンスに追加情報を提供するために使用されますが、提案のベースには使用されません。

警告

設定の変更はすぐには反映されない場合があります。設定の変更は、 を使用して追跡できます。 DescribeQuerySuggestionsConfig API。更新した設定が有効になるまでの時間は、24 時間ごと、設定を変更した後、またはブロックリストを適用した後に、 によって自動的に提案が Amazon Kendra 更新されます。

CLI

インデックスレベルで設定を変更する代わりに、クエリレベルでクエリの提案を取得してドキュメントフィールドの設定をオーバーライドできます。

aws kendra get-query-suggestions \ --index-id index-id \ --query-text "query-text" \ --suggestion-types '["DOCUMENT_ATTRIBUTES"]' \ --attribute-suggestions-config '{"SuggestionAttributes":'["field/attribute key 1", "field/attribute key 2"]', "AdditionalResponseAttributes":'["response field/attribute key 1", "response field/attribute key 2"]'}' \ --max-suggestions-count 1 // If you want to limit the number of suggestions

クエリの提案を更新するには

例えば、ドキュメントフィールドの設定をインデックスレベルで変更するには:

aws kendra update-query-suggestions-config \ --index-id index-id \ --attribute-suggestions-config '{"SuggestableConfigList": '[{"SuggestableConfig": "_document_title", "Suggestable": true}]', "AttributeSuggestionsMode": "ACTIVE"}'
Python

インデックスレベルで設定を変更する代わりに、クエリレベルでクエリの提案を取得してドキュメントフィールドの設定をオーバーライドできます。

import boto3 from botocore.exceptions import ClientError kendra = boto3.client("kendra") print("Get query suggestions.") # Provide the index ID index_id = "index-id" # Provide the query text query_text = "query" # Provide the query suggestions type query_suggestions_type = "DOCUMENT_ATTRIBUTES" # Override fields/attributes configuration at query level configuration = {"SuggestionAttributes": '["field/attribute key 1", "field/attribute key 2"]', "AdditionalResponseAttributes": '["response field/attribute key 1", "response field/attribute key 2"]' } # If you want to limit the number of suggestions num_suggestions = 1 try: query_suggestions_response = kendra.get_query_suggestions( IndexId = index_id, QueryText = query_text, SuggestionTypes = [query_suggestions_type], AttributeSuggestionsConfig = configuration, MaxSuggestionsCount = num_suggestions ) # Print out the suggestions you received if ("Suggestions" in query_suggestions_response.keys()) { for (suggestion: query_suggestions_response["Suggestions"]) { print(suggestion["Value"]["Text"]["Text"]); } } except ClientError as e: print("%s" % e) print("Program ends.")

クエリの提案を更新するには

例えば、ドキュメントフィールドの設定をインデックスレベルで変更するには:

import boto3 from botocore.exceptions import ClientError import pprint import time kendra = boto3.client("kendra") print("Updating query suggestions settings/configuration for an index.") # Provide the index ID index_id = "index-id" # Configure the settings you want to update at the index level configuration = {"SuggestableConfigList": '[{"SuggestableConfig": "_document_title", "Suggestable": true}]', "AttributeSuggestionsMode": "ACTIVE" } try: kendra.update_query_suggestions_config( IndexId = index_id, AttributeSuggestionsConfig = configuration ) print("Wait for Amazon Kendra to update the query suggestions.") while True: # Get query suggestions description of settings/configuration query_sugg_config_response = kendra.describe_query_suggestions_config( IndexId = index_id ) # If status is not UPDATING, then quit status = query_sugg_config_response["Status"] print(" Updating query suggestions config. Status: " + status) if status != "UPDATING": break time.sleep(60) except ClientError as e: print("%s" % e) print("Program ends.")

ドキュメントフィールドのユーザーコントロール

クエリの提案のベースにするドキュメントフィールドに、ユーザーコンテキストフィルタリングを適用できます。これにより、ユーザーまたはグループのドキュメントへのアクセスに基づいて、ドキュメントフィールド情報をフィルタリングします。例えば、インターンが会社のポータルを検索したが、会社の極秘文書にはアクセスできなかったとします。そのため、極秘文書のタイトルや、その他の提案可能なフィールドに基づいて提案されたクエリは、インターンには表示されません。

アクセスコントロールリスト (ACL) を使用してドキュメントのインデックスを作成し、どのユーザーとグループにどのドキュメントへのアクセスを割り当てるかを定義できます。その後、クエリの提案のドキュメントフィールドにユーザーコンテキストフィルタリングを適用できます。現在、インデックスに設定されているユーザーコンテキストフィルタリングは、クエリの提案のドキュメントフィールド設定に適用されているユーザーコンテキストフィルタリングと同じです。ユーザーコンテキストフィルタリングは、ドキュメントフィールド設定の一部です。を使用する AttributeSuggestionsGetConfig と の呼び出し GetQuerySuggestions.

特定のクエリやドキュメントフィールドの内容を提案からブロックする

ブロックリスト Amazon Kendra は、特定のクエリをユーザーに示すのを停止します。ブロックリストは、クエリ候補から除外する単語またはフレーズのリストです。 は、ブロックリスト内の単語またはフレーズと完全に一致するクエリ Amazon Kendra を除外します。

ブロックリストを使用すると、クエリ履歴またはドキュメントフィールドに一般的に表示される、 Amazon Kendra が提案として選択する可能性がある不快な単語や語句から保護できます。ブロックリストは、公開または発表する準備ができていない情報を含むクエリを が Amazon Kendra 提案できないようにすることもできます。例えば、新製品がリリースされる可能性があり、ユーザーが頻繁に問い合わせているとします。ただし、まだリリースする準備ができていないために製品を提案しない場合は、製品名やその製品情報を含むクエリを提案からブロックできます。

を使用してクエリのブロックリストを作成できます。 CreateQuerySuggestionsBlockList API。各単語または語句はテキストファイルで個別の行に配置します。次に、Amazon S3 バケットにテキストファイルをアップロードし、 のファイルへのパスまたは場所を指定します Amazon S3。 Amazon Kendra 現在、 はブロックリストを 1 つだけ作成できます。

Amazon S3 バケット内のブロックされた単語やフレーズのテキストファイルを置き換えることができます。でブロックリストを更新するには Amazon Kendra、 UpdateQuerySuggestionsBlockList API.

を使用するDescribeQuerySuggestionsBlockList ブロックリストのステータスを取得するためのAPI。 DescribeQuerySuggestionsBlockList は、次のような他の有用な情報も提供できます。

  • ブロックリストの最終更新日時

  • 現在のブロックリストにある語句の数

  • ブロックリストを作成する際に役立つエラーメッセージ

また、 を使用することもできますListQuerySuggestionsBlockLists インデックスのブロックリストの概要のリストを取得するAPI。

ブロックリストを削除するには、DeleteQuerySuggestionsBlockList API を使用します。

ブロックリストへの更新はすぐには反映されない場合があります。DescribeQuerySuggestionsBlockList API を使用して更新を追跡できます。

CLI

ブロックリストを作成するには

aws kendra create-query-suggestions-block-list \ --index-id index-id \ --name "block-list-name" \ --description "block-list-description" \ --source-s3-path "Bucket=bucket-name,Key=query-suggestions/block_list.txt" \ --role-arn role-arn

ブロックリストを更新するには

aws kendra update-query-suggestions-block-list \ --index-id index-id \ --name "new-block-list-name" \ --description "new-block-list-description" \ --source-s3-path "Bucket=bucket-name,Key=query-suggestions/new_block_list.txt" \ --role-arn role-arn

ブロックリストを削除するには

aws kendra delete-query-suggestions-block-list \ --index-id index-id \ --id block-list-id
Python

ブロックリストを作成するには

import boto3 from botocore.exceptions import ClientError import pprint import time kendra = boto3.client("kendra") print("Create a query suggestions block list.") # Provide a name for the block list block_list_name = "block-list-name" # Provide an optional description for the block list block_list_description = "block-list-description" # Provide the IAM role ARN required for query suggestions block lists block_list_role_arn = "role-arn" # Provide the index ID index_id = "index-id" s3_bucket_name = "bucket-name" s3_key = "query-suggestions/block_list.txt" source_s3_path = { 'Bucket': s3_bucket_name, 'Key': s3_key } try: block_list_response = kendra.create_query_suggestions_block_list( Description = block_list_description, Name = block_list_name, RoleArn = block_list_role_arn, IndexId = index_id, SourceS3Path = source_s3_path ) print(block_list_response) block_list_id = block_list_response["Id"] print("Wait for Amazon Kendra to create the block list.") while True: # Get block list description block_list_description = kendra.describe_query_suggestions_block_list( Id = block_list_id, IndexId = index_id ) # If status is not CREATING, then quit status = block_list_description["Status"] print("Creating block list. Status: " + status) if status != "CREATING": break time.sleep(60) except ClientError as e: print("%s" % e) print("Program ends.")

ブロックリストを更新するには

import boto3 from botocore.exceptions import ClientError import pprint import time kendra = boto3.client("kendra") print("Update a block list for query suggestions.") # Provide the block list name you want to update block_list_name = "new-block-list-name" # Provide the block list description you want to update block_list_description = "new-block-list-description" # Provide the IAM role ARN required for query suggestions block lists block_list_role_arn = "role-arn" # Provide the block list ID block_list_id = "block-list-id" # Provide the index ID index_id = "index-id" s3_bucket_name = "bucket-name" s3_key = "query-suggestions/new_block_list.txt" source_s3_path = { 'Bucket': s3_bucket_name, 'Key': s3_key } try: kendra.update_query_suggestions_block_list( Id = block_list_id, IndexId = index_id, Description = block_list_description, Name = block_list_name, RoleArn = block_list_role_arn, SourceS3Path = source_s3_path ) print("Wait for Amazon Kendra to update the block list.") while True: # Get block list description block_list_description = kendra.describe_query_suggestions_block_list( Id = block_list_id, IndexId = index_id ) # If status is not UPDATING, then the update has finished status = block_list_description["Status"] print("Updating block list. Status: " + status) if status != "UPDATING": break time.sleep(60) except ClientError as e: print("%s" % e) print("Program ends.")

ブロックリストを削除するには

import boto3 from botocore.exceptions import ClientError kendra = boto3.client("kendra") print("Delete a block list for query suggestions.") # provide the block list ID query_suggestions_block_list_id = "query-suggestions-block-list-id" # Provide the index ID index_id = "index-id" try: kendra.delete_query_suggestions_block_list( Id = query_suggestions_block_list_id, IndexId = index_id ) except ClientError as e: print("%s" % e) print("Program ends.")