查詢建議 - Amazon Kendra

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

查詢建議

Amazon Kendra 查詢建議可以幫助您的用戶更快地輸入搜索查詢並引導他們的搜索。

Amazon Kendra 根據下列其中一項建議與使用者相關的查詢:

  • 查詢歷史記錄或查詢日誌中的熱門查詢

  • 文檔欄位/屬性的內容

您可以通過設置SuggestionTypes為或DOCUMENT_ATTRIBUTES和調用來設置使用查詢歷史記錄QUERY或文檔字段的偏好設置GetQuerySuggestions。根據預設, Amazon Kendra 會使用查詢歷史記錄來建議。如果查詢記錄和文件欄位在您呼叫時都已啟動,UpdateQuerySuggestionsConfig且您尚未將SuggestionTypes偏好設定設定設定為使用文件欄位,則 Amazon Kendra 會使用查詢記錄。

如果您使用控制台,則可以根據查詢歷史記錄或文檔字段進行查詢建議。您首先選取您的索引,然後在導覽功能表中的 [擴充] 下選取 [查詢建議]。然後選取 [設定查詢建議]。設定查詢建議後,系統會將您導向至搜尋主控台,您可以在其中選取右側面板中的 [查詢記錄] 或 [文件] 欄位,然後在搜尋列中輸入搜尋查詢。

根據預設,使用查詢歷史記錄和文件欄位的查詢建議都會啟用,而無需額外付費。您可以隨時使用 UpdateQuerySuggestionsConfig API 停用這些類型的查詢建議。若要根據查詢歷史記錄停用查詢建議,請在呼叫DISABLED時設定ModeUpdateQuerySuggestionsConfig。要根據文檔字段停用查詢建議,請INACTIVE在文檔字段配置中設置AttributeSuggestionsMode為,然後調用UpdateQuerySuggestionsConfig>。如果您使用主控台,您可以在 [查詢建議] 設定中停用查詢建議

查詢建議不區分大小寫。 Amazon Kendra 將查詢前置詞和建議的查詢轉換為小寫,忽略所有單引號和雙引號,並以單一空格取代多個空格字元。 Amazon Kendra 匹配所有其他特殊字符,因為他們是。 Amazon Kendra 如果使用者輸入少於兩個字元或超過 60 個字元,則不會顯示任何建議。

使用查詢歷史查詢建議

您可以選擇根據查詢歷史記錄或查詢日誌中的常用查詢建議與使用者相關的查詢。 Amazon Kendra 使用您的使用者搜尋並從這些查詢中學習的所有查詢,向您的使用者提供建議。 Amazon Kendra 當用戶開始輸入查詢時,向用戶建議流行的查詢。 Amazon Kendra 建議查詢,如果查詢的前綴或前幾個字符與用戶開始輸入的查詢相匹配。

例如,用戶開始鍵入查詢「即將發生的事件」。 Amazon Kendra 從查詢歷史記錄中了解到,許多用戶多次搜索了「即將發生的事件 2050」。用戶看到「即將發生的事件 2050」直接出現在他們的搜索欄下方,自動完成他們的搜索查詢。使用者選取此查詢建議,搜尋結果中會傳回「新事件:2050 年發生的事件」文件。

您可以指定如何 Amazon Kendra 選取符合資格的查詢,以向使用者建議。例如,您可以指定查詢建議必須由至少 10 個不重複使用者 (預設值為 3 位)、在過去 30 天內搜尋過,且不包含封鎖清單中的任何字詞或片語。 Amazon Kendra 要求查詢至少有一個搜尋結果,且至少包含一個超過四個字元的單字。

選取建議查詢的設定

您可以使用 UpdateQuerySuggestionsConfigAPI 設定下列設定,以選取建議的查詢:

  • 模式:使用查詢歷史記錄的查詢建議是ENABLEDLEARN_ONLY。 Amazon Kendra 預設會啟用查詢建議。 LEARN_ONLY關閉查詢建議。如果關閉,則會 Amazon Kendra 繼續學習建議,但不會向使用者提供查詢建議。

  • 查詢記錄時間視窗 — 查詢在查詢記錄時間視窗中的最近程度。時間範圍是從當天到過去天數的整數值。

  • 不含使用者資訊的查詢 — 設定TRUE為包含所有查詢,或設定FALSE為僅包含使用者資訊的查詢。如果您的搜尋應用程式在使用者發出查詢時包含使用者資訊 (例如使用者 ID),則可以使用此設定。根據預設,如果沒有與查詢相關聯的特定使用者資訊,此設定不會篩選出查詢。但是,您可以使用此設定,僅根據包含使用者資訊的查詢提出建議。

  • 唯一使用者 — 必須在查詢中搜尋查詢才有資格向您的使用者建議的唯一使用者數目下限。這個數字是一個整數值。

  • 查詢計數 — 必須搜尋查詢才符合向使用者建議的查詢次數下限。這個數字是一個整數值。

這些設定會影響如何選取查詢做為常用查詢,以向使用者建議。調整設定的方式取決於您的特定需求,例如:

  • 如果您的使用者通常每月平均搜尋一次,則您可以將查詢記錄時間視窗中的天數設定為 30 天。透過使用該設定,您可以在使用者在時間範圍中過期之前擷取大多數使用者最近的查詢。

  • 如果只有少數查詢包含使用者資訊,而您不想根據較小的範例大小建議查詢,則可以設定查詢以包含所有使用者。

  • 如果您將常用查詢定義為由至少 10 個不重複使用者搜尋,並搜尋至少 100 次,則您將唯一使用者設定為 10,而查詢計數為 100。

警告

您對設定所做的變更可能不會立即生效。您可以使用 DescribeQuerySuggestionsConfigAPI 追蹤設定變更。更新設定的生效時間取決於您所做的更新,以及索引中的搜尋查詢數目。 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.")

清除建議,同時保留查詢歷史

您可以使用 ClearQuerySuggestionsAPI 清除查詢建議。清除建議只會刪除現有的查詢建議,而不會刪除查詢歷史記錄中的查詢。當您清除建議時, 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 仍然需要時間來累積新的查詢才能學習新的建議。

您可以使用 DescribeQuerySuggestionsConfigAPI 檢查您目前的設定。

使用文件欄位查詢建議

您可以選擇根據文件欄位的內容建議與使用者相關的查詢。您可以使用文件欄位中包含的資訊來自動完成查詢,而不是使用查詢歷史記錄來建議其他常用的相關查詢。 Amazon Kendra 會在設定為Suggestable且與使用者查詢密切符合的欄位中尋找相關內容。然後,在您的用戶開始輸入查詢時向用戶 Amazon Kendra 建議此內容。

例如,如果您指定要基於建議的標題字段,並且用戶開始輸入查詢「如何使用 Amazon ken... ',最相關的標題「如何 Amazon Kendra 工作」可以建議自動完成搜索。用戶看到「如何 Amazon Kendra 工作」直接出現在他們的搜索欄下方,自動完成他們的搜索查詢。用戶選擇此查詢建議,並在搜索結果中返回「如何 Amazon Kendra 工作」文檔。

您可以使用StringStringList類型的任何文件欄位的內容來建議查詢,方法是將欄位設定Suggestable為做為欄位組態的一部分,以取得查詢建議。您也可以使用封鎖清單,讓包含特定字詞或片語的建議文件欄位不會向您的使用者顯示。您可以使用一個封鎖清單。無論您是將查詢建議設定為使用查詢歷史記錄還是文件欄位,封鎖清單都會套用。

選取建議欄位的設定

您可以設定下列設定,以便使用AttributeSuggestionsConfig和呼叫 UpdateQuerySuggestionsConfigAPI 來更新索引層級的設定來選取建議的文件欄位:

  • 欄位/屬性建議模式 — 使用文件欄位的查詢建議為或。ACTIVE INACTIVE Amazon Kendra 預設會啟用查詢建議。

  • 可建@@ 欄位/屬性 — 欄位名稱或欄位鍵,以建議為基礎。這些欄位必須設定TRUESuggestable,作為欄位組態的一部分。您可以在查詢級別覆蓋字段配置,同時保持索引級別的配置。使用 GetQuerySuggestionsAPI AttributeSuggestionConfig 在查詢層級進行變更。這個查詢層級的設定對於快速嘗試使用不同的文件欄位非常有用,而不必在索引層級更新組態。

  • 其他欄位/屬性 — 您要包含在查詢建議回應中的其他欄位。這些欄位用於在回應中提供額外資訊;但是,它們不會用於建議的基礎。

警告

您對設定所做的變更可能不會立即生效。您可以使用 DescribeQuerySuggestionsConfigAPI 追蹤設定變更。更新的設定生效的時間取決於您所做的更新。 Amazon Kendra 在您變更設定後或套用封鎖清單後,每 24 小時自動更新建議。

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 止建議包含尚未準備好公開發行或公佈之資訊的查詢。例如,您的使用者經常會查詢有關潛在新產品的即將發行版本。但是,您不想建議該產品,因為您還沒有準備好發布它。您可以阻止包含產品名稱和建議產品信息的查詢。

您可以使用 CreateQuerySuggestionsBlockListAPI 為查詢建立封鎖清單。您可以將每個區塊字或片語放在文字檔案中的個別行上。然後,您將文字檔上傳到 Amazon S3 儲存貯體,並在中提供檔案的路徑或位置 Amazon S3。 Amazon Kendra 目前僅支援建立一個封鎖清單。

您可以取代 Amazon S3 值區中封鎖字詞和片語的文字檔案。若要更新中的封鎖清單 Amazon Kendra,請使用 UpdateQuerySuggestionsBlockListAPI。

使用 DescribeQuerySuggestionsBlockListAPI 獲取阻止列表的狀態。 DescribeQuerySuggestionsBlockList還可以為您提供其他有用的信息,例如:

  • 上次更新封鎖清單的時間

  • 目前封鎖清單中有多少字或片語

  • 建立封鎖清單時有用的錯誤訊息

您也可以使用 ListQuerySuggestionsBlockListsAPI 取得索引的封鎖清單摘要清單。

若要刪除您的封鎖清單,請使用 DeleteQuerySuggestionsBlockListAPI。

您對封鎖清單的更新可能不會立即生效。您可以使用 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.")