查詢索引 - Amazon Kendra

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

查詢索引

當您搜尋索引時, Amazon Kendra 會使用您提供的有關文件的所有資訊來決定與輸入的檢索字詞最相關的文件。 Amazon Kendra 考慮的一些項目是:

  • 文件的文字或內文。

  • 文件的標題。

  • 您已標記為可搜尋的自訂文字欄位。

  • 應使用您指示的日期欄位來決定文件的「新鮮度」。

  • 任何其他可以提供相關資訊的欄位。

Amazon Kendra 還可以根据您為搜索設置的任何字段/屬性過濾器來過濾響應。例如,如果您有一個名為「部門」的自定義字段,則可以過濾響應以僅返回名為「合法」部門的文檔。如需詳細資訊,請參閱自訂欄位或屬性

傳回的搜尋結果會依據 Amazon Kendra 決定每個文件的相關性來排序。結果會分頁,以便您可以一次向使用者顯示頁面。

若要搜尋已編製索引的文件 Amazon Lex, Amazon Kendra 請使用 AMAZON。 KendraSearchIntent。如需 Amazon Kendra 使用配置的範例 Amazon Lex,請參閱建立 Amazon Kendra 索引的常見問題集機器人

下面的例子演示了如何搜索索引。 Amazon Kendra 決定最適合查詢的搜尋結果類型 (答案、文件、問題答案)。您無法設定 Amazon Kendra 為將特定類型的搜尋回應 (回答、文件、問題答案) 傳回查詢。

如需有關查詢回應的資訊,請參閱查詢回應和回應類型

必要條件

在使用查詢 API 查詢索引之前:

  • 設定索引所需的權限,並連線至資料來源或批次上傳文件。如需詳細資訊,請參閱IAM 角色。呼叫 API 建立索引和資料來源連接器或批次上傳文件時,您可以使用角色的 Amazon 資源名稱。

  • 設定 AWS Command Line Interface、SDK 或前往 Amazon Kendra 主控台。如需詳細資訊,請參閱設定 Amazon Kendra

  • 創建索引並連接到文檔的數據源或批量上傳文檔。如需詳細資訊,請參閱建立索引建立資料來源連接器

搜尋索引 (主控台)

您可以使用主 Amazon Kendra 控台來搜尋和測試索引。您可以進行查詢並查看結果。

使用主控台搜尋索引
  1. 請登入 AWS Management Console 並開啟 Amazon Kendra 主控台,網址為 http://console.aws.amazon.com/kendra/

  2. 在導覽窗格中,選擇 [索引]。

  3. 選擇您的索引。

  4. 在導覽選單中,選擇搜尋索引的選項。

  5. 在文字方塊中輸入查詢,然後按 Enter 鍵。

  6. Amazon Kendra 返回搜索的結果。

您還可以通過選擇側面板中的燈泡圖標來獲取搜索的查詢 ID。

搜尋索引 (SDK)

若要使用 Python 或 Java 搜尋索引
  • 下列範例會搜尋索引。將的值變更query為您的搜尋查詢和index_id或,變更indexId為您要搜尋之索引的索引識別碼。

    當您呼叫 Query 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"); } } }

搜索索引(郵遞員)

您可以使用郵遞員來查詢和測試 Amazon Kendra 索引。

若要使用郵遞員搜尋索引
  1. 在郵遞員中創建一個新的集合,並將請求類型設置為 POST

  2. 輸入端點 URL。例如, https://kendra.. <region>

  3. 選取「授權」標籤,然後輸入下列資訊。

    • 類型 — 選取AWS 簽名

    • AccessKey輸入建立 IAM 使用者時產生的存取金鑰。

    • SecretKey輸入建立 IAM 使用者時產生的密鑰。

    • AWS 區域 — 輸入索引的區域。例如,us-west-2

    • 服務名稱 — 輸入肯德拉。這是區分大小寫的,所以必須是小寫。

      警告

      如果您輸入錯誤的服務名稱或未使用小寫字母,則在您選取「傳送」以傳送要求時,就會擲回錯誤:「認證應設定為正確的服務 'kendra'。」

      您還必須檢查是否輸入了正確的訪問密鑰和密鑰。

  4. 選取「標題」標籤,然後輸入下列機碼與值資訊。

    • 按鍵:X-目標

      價值:是. 阿馬遜. AWSKendraFrontendService. 查詢

    • 金鑰:內容編

      值:阿姆斯 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讀取(amazon AND sports)之前NOT rainforest

  • 範圍:日期或數值範圍值。範圍可以是包容性、排斥或無界限。例如,您可以搜尋上次在 2020 年 1 月 1 日至 2020 年 12 月 31 日期間更新的文件,包括這些日期。

  • 欄位:使用特定欄位來限制搜尋。例如,您可以在「位置」字段中搜索具有「美國」的文檔。

  • 萬用字元:部分符合文字字串。例如,Cloud*可以相符 CloudFormation。 Amazon Kendra 目前僅支援尾隨萬用字元。

  • 精確引號:完全匹配文本字符串。例如,包含"Amazon Kendra" "pricing".

您可以使用上述任何運營商的組合。

請注意,過度使用運算子或高度複雜的查詢可能會影響查詢延遲。就延遲而言,萬用字元是一些最昂貴的運算子。一般規則是您使用的術語和運算子越多,對延遲的潛在影響就越大。影響延遲的其他因素包括索引文件的平均大小、索引的大小、搜尋結果的篩選,以及索 Amazon Kendra 引的整體負載。

Boolean

您可以使用布林運算子AND、、OR來組合或排除單字NOT

以下是使用布林運算子的範例。

amazon AND sports

返回在文本中包含兩個術語「Amazon」和「運動」的搜索結果,如亞馬遜 Prime 視頻體育或其他類似內容。

sports OR recreation

傳回文字中包含術語「sports」或「娛樂」或兩者的搜尋結果。

amazon NOT rainforest

傳回文字中包含術語「Amazon」但不包含「雨林」一詞的搜尋結果。這是為了搜索有關公司的文件 Amazon,而不是 Amazon 雨林。

括號

您可以使用括號以優先順序查詢巢狀單字。括號表示應該 Amazon Kendra 如何讀取查詢。

以下是使用括號運算子的範例。

(amazon AND sports) NOT rainforest

返回在文本中包含術語「亞馬遜」和「運動」,但不包含術語「雨林」的文檔。這是為了搜索 Amazon Prime 視頻體育或其他類似內容,而不是 Amazon 雨林中的冒險運動。括號有助於表示amazon AND sports應該在之前閱讀NOT rainforest。查詢不應讀取為amazon AND (sports NOT rainforest)

(amazon AND (sports OR recreation)) NOT rainforest

返回包含術語「體育」或「娛樂」,或兩者兼而有之,以及術語「亞馬遜」的文件。但它不包括「雨林」一詞。這是搜索 Amazon 總理視頻體育或娛樂, 而不是冒險運動在 Amazon 雨林. 括號有助於表明sports OR recreation應該在與之前閱讀的 '亞馬遜' 結合之前閱讀NOT rainforest。查詢不應讀取為amazon AND (sports OR (recreation NOT rainforest))

範圍

您可以使用值範圍來篩選搜尋結果。您可以指定屬性和範圍值。這可以是日期或數字類型。

日期範圍必須為下列格式:

  • Epoch

  • YYYY

  • 年毫米

  • 年-月-日

  • 年-月-日-日

您也可以指定是否要包含或排除範圍的較低值和較高值。

以下是使用範圍運算子的範例。

_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 目前僅支援尾隨萬用字元。尾端萬用字元的前置字元數目必須大於兩個。

以下是使用萬用字元運算子的範例。

Cloud*

傳回包含諸如 CloudFormation 和之類的變體的文件 CloudWatch。

kendra*aws

返回包含變體的文檔,如肯德拉.

kendra*aws*

返回包含變體的文檔,如肯德拉.

精確引號

您可以使用引號來搜尋完全相符的文字。

以下是使用引號的範例。

"Amazon Kendra" "pricing"

傳回同時包含「」和「定價Amazon Kendra」一詞的文件。文件必須同時包含 '' 和 '定價' 才能傳回結果。Amazon Kendra

"Amazon Kendra" "pricing" cost

傳回同時包含「」一詞和「定價Amazon Kendra」一詞,以及選擇性地指定「成本」一詞的文件。文件必須同時包含Amazon Kendra'' 和 '定價' 才能傳回結果,但不一定包含「成本」。

無效的查詢語法

Amazon Kendra 如果您的查詢語法發生問題,或者您的查詢目前不受支援,則會發出警告 Amazon Kendra。如需詳細資訊,請參閱查詢警告的 API 文件

下列查詢是無效查詢語法的範例。

_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 並開啟 Amazon Kendra 主控台,網址為 http://console.aws.amazon.com/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"); } } }