

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

# 在沒有程式碼的情況下建立搜尋體驗
<a name="deploying-search-experience-no-code"></a>

您可以建置和部署 Amazon Kendra 搜尋應用程式，而不需要任何前端程式碼。 Amazon Kendra *Experience Builder* 可協助您一鍵建置和部署功能完整的搜尋應用程式，讓您立即開始搜尋。您可以自訂設計您的搜尋頁面，並調整您的搜尋，根據使用者的需求量身打造體驗。 Amazon Kendra 產生搜尋頁面的唯一、完全託管的端點 URL，以開始搜尋您的文件和FAQs。您可以快速建立搜尋體驗的概念驗證，並與他人共用。

您可以使用建置器中可用的搜尋體驗範本來自訂您的搜尋。您可以邀請其他人合作建立您的搜尋體驗，或評估搜尋結果以進行調校。您的搜尋體驗準備好供使用者開始搜尋後，您只需共用安全端點 URL。

## 搜尋體驗建置器的運作方式
<a name="how-search-experience-builder-works"></a>

建立搜尋體驗的整體程序如下：

1. 您可以透過提供名稱、描述並選擇您要用於搜尋體驗的資料來源，來建立您的搜尋體驗。

1. 您可以在 中設定使用者和群組的清單， AWS IAM Identity Center 然後將存取權指派給他們以進行搜尋。您可以將自己納入體驗的擁有者。如需詳細資訊，請參閱[提供對搜尋頁面的存取](#access-search-experience)。

1. 您可以開啟 Amazon Kendra Experience Builder 來設計和調整搜尋頁面。您可以與指派自有編輯存取權限或檢視搜尋存取權限的其他人共用搜尋體驗的端點 URL。

您可以呼叫 [CreateExperience](https://docs.aws.amazon.com/kendra/latest/APIReference/API_CreateExperience.html) API 來建立和設定您的搜尋體驗。如果您使用 主控台，請選取您的索引，然後在導覽功能表中選取**體驗**來設定您的體驗。

## 設計和調整您的搜尋體驗
<a name="design-tune-search-experience"></a>

建立並設定搜尋體驗後，您可以使用端點 URL 開啟搜尋體驗，以具有編輯器存取權的擁有者身分開始自訂搜尋。您可以在搜尋方塊中輸入您的查詢，然後使用側邊面板上的編輯選項自訂您的搜尋，以查看它們如何套用至您的頁面。當您準備好發佈時，請選取**發佈**。您也可以在**切換到即時檢視**、檢視最新發佈版本的搜尋頁面，以及**切換到建置模式**，以編輯或自訂您的搜尋頁面。

以下是您可以自訂搜尋體驗的方式。

### 篩選條件
<a name="search-experience-filter"></a>

依文件屬性新增面向搜尋或篩選條件。這包括自訂屬性。您可以使用自己設定的中繼資料欄位來新增篩選條件。例如，若要依每個城市類別進行面向搜尋，請使用包含所有城市類別的`_category`自訂文件屬性。

### 建議的答案
<a name="search-experience-suggested-answer"></a>

將機器學習產生的答案新增至使用者的查詢。例如，*「此課程有多困難？」*。 Amazon Kendra 可以擷取所有參考課程困難之文件中最相關的文字，並建議最相關的答案。

### 常見問答集
<a name="search-experience-faq"></a>

新增常見問答集文件，以提供常見問題的答案。例如，*「要完成此課程多少小時？」*。 Amazon Kendra 可以使用包含此問題答案的常見問答集文件，並提供正確的答案。

### Sort
<a name="search-experience-sort"></a>

新增搜尋結果的排序，讓使用者可以依相關性、建立時間、上次更新時間和其他排序條件來組織結果。

### 文件
<a name="search-experience-documents"></a>

設定文件或搜尋結果在搜尋頁面上的顯示方式。您可以設定頁面上顯示的結果數量、包含分頁，例如頁碼、啟用使用者意見回饋按鈕，以及排列文件中繼資料欄位在搜尋結果中的顯示方式。

### Language
<a name="search-experience-language"></a>

選取語言以篩選所選語言的搜尋結果或文件。

### 搜尋方塊
<a name="search-experience-search-box"></a>

設定搜尋方塊的大小和預留位置文字，並允許查詢建議。

### 關聯性調校
<a name="search-experience-relevance-tuning"></a>

新增提升以記錄中繼資料欄位，以便在使用者搜尋文件時對這些欄位設定更多權重。您可以新增從 1 開始並遞增到 10 的權重。您可以提升文字、日期和數值欄位類型。例如，若要給予 `_last_updated_at` 和比其他欄位`_created_at`更多的權重或重要性，請根據這些欄位的重要性為這些欄位提供 1 到 10 的權重。您可以為每個搜尋應用程式或體驗套用不同的相關性調校組態。

## 提供對搜尋頁面的存取
<a name="access-search-experience"></a>

透過 IAM Identity Center 存取您的搜尋體驗。當您設定搜尋體驗時，您可以授予 Identity Center 目錄中列出的其他人存取您的 Amazon Kendra 搜尋頁面。他們會收到一封電子郵件，指示他們使用 IAM Identity Center 中的登入資料來存取搜尋頁面。您必須在組織層級或帳戶持有人層級設定 IAM Identity Center AWS Organizations。如需設定 IAM Identity Center 的詳細資訊，請參閱 [IAM Identity Center 入門](https://docs.aws.amazon.com/kendra/latest/dg/getting-started-aws-sso.html)。

您可以使用搜尋體驗在 IAM Identity Center 中啟用使用者身分，並使用 API 或主控台指派*檢視器*或*擁有者*存取許可。
+ **檢視器**：允許發出查詢、接收與其搜尋相關的建議答案，並向其提供意見回饋， Amazon Kendra 以便持續改善搜尋。
+ **擁有者**：允許自訂搜尋頁面的設計、調整搜尋，並使用搜尋應用程式做為*檢視器*。目前不支援在主控台中停用檢視器的存取權。

若要指派其他人存取您的搜尋體驗，您必須先使用 [ExperienceConfiguration](https://docs.aws.amazon.com/kendra/latest/APIReference/API_ExperienceConfiguration.html) 物件，在 IAM Identity Center 中啟用使用者身分搭配您的 Amazon Kendra 體驗。您可以指定包含使用者識別符的欄位名稱，例如使用者名稱或電子郵件地址。然後，您可以使用 [AssociateEntitiesToExperience](https://docs.aws.amazon.com/kendra/latest/APIReference/API_AssociateEntitiesToExperience.html) API 授予使用者對搜尋體驗的存取權，並使用 [AssociatePersonasToEntities](https://docs.aws.amazon.com/kendra/latest/APIReference/API_AssociatePersonasToEntities.html) API 將其許可定義為*檢視器*或*擁有者*。您可以使用 [EntityConfiguration](https://docs.aws.amazon.com/kendra/latest/APIReference/API_EntityConfiguration.html) 物件指定每個使用者或群組，以及該使用者或群組是使用 [EntityPersonaConfiguraton](https://docs.aws.amazon.com/kendra/latest/APIReference/API_EntityPersonaConfiguration.html) 物件的*檢視器*或*擁有者*。

若要使用主控台指派其他人存取您的搜尋體驗，您必須先建立體驗並確認您的身分，而且您是擁有者。然後，您可以將其他使用者或群組指派為檢視器或擁有者。在 主控台中，選取您的索引，然後在導覽功能表中選取**體驗**。建立您的體驗之後，您可以從清單中選擇您的體驗。前往**存取管理**，將使用者或群組指派為檢視器或擁有者。

## 設定搜尋體驗
<a name="config-search-experience"></a>

以下是設定或建立搜尋體驗的範例。

------
#### [ Console ]

**建立 Amazon Kendra 搜尋體驗**

1. 在左側導覽窗格的**索引**下，選取**體驗**，然後選取**建立體驗**。

1. 在**設定體驗**頁面上，輸入您體驗的名稱和描述，選擇您的內容來源，然後選擇適用於您體驗的 IAM 角色。如需 IAM 角色的詳細資訊，請參閱 [IAM 角色以取得 Amazon Kendra 體驗](https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html)。

1. 在**從身分中心目錄確認您的身分**頁面上，選取您的使用者 ID，例如您的電子郵件。如果您沒有 Identity Center 目錄，只需輸入您的全名和電子郵件即可建立 Identity Center 目錄。這包括身為體驗使用者的您，並自動指派擁有者存取權。

1. 在**檢閱以開啟體驗建置器**頁面上，檢閱您的組態詳細資訊，然後選取**建立體驗並開啟體驗建置器**以開始編輯您的搜尋頁面。

------
#### [ CLI ]

**建立 Amazon Kendra 體驗**

```
aws kendra create-experience \
 --name experience-name \
 --description "experience description" \
 --index-id index-id \
 --role-arn arn:aws:iam::account-id:role/role-name \
 --configuration '{"ExperienceConfiguration":[{"ContentSourceConfiguration":{"DataSourceIds":["data-source-1","data-source-2"]}, "UserIdentityConfiguration":"identity attribute name"}]}' 

aws kendra describe-experience \
 --endpoints experience-endpoint-URL(s)
```

------
#### [ Python ]

**建立 Amazon Kendra 體驗**

```
import boto3
from botocore.exceptions import ClientError
import pprint
import time

kendra = boto3.client("kendra")

print("Create an experience.")

# Provide a name for the experience
name = "experience-name"
# Provide an optional description for the experience
description = "experience description"
# Provide the index ID for the experience
index_id = "index-id"
# Provide the IAM role ARN required for Amazon Kendra experiences
role_arn = "arn:aws:iam::${account-id}:role/${role-name}"
# Configure the experience
configuration = {"ExperienceConfiguration":
        [{
            "ContentSourceConfiguration":{"DataSourceIds":["data-source-1","data-source-2"]},
            "UserIdentityConfiguration":"identity attribute name"
        }]
    }

try:
    experience_response = kendra.create_experience(
        Name = name,
        Description = description,
        IndexId = index_id,
        RoleArn = role_arn,
        Configuration = configuration
    )

    pprint.pprint(experience_response)

    experience_endpoints = experience_response["Endpoints"]

    print("Wait for Amazon Kendra to create the experience.")

    while True:
        # Get the details of the experience, such as the status
        experience_description = kendra.describe_experience(
            Endpoints = experience_endpoints
        )
        status = experience_description["Status"]
        print(" Creating experience. Status: "+status)
        time.sleep(60)
        if status != "CREATING":
            break

except  ClientError as e:
        print("%s" % e)

print("Program ends.")
```

------
#### [ Java ]

**建立 Amazon Kendra**

```
package com.amazonaws.kendra;

import java.util.concurrent.TimeUnit;
import software.amazon.awssdk.services.kendra.KendraClient;
import software.amazon.awssdk.services.kendra.model.CreateExperienceRequest;
import software.amazon.awssdk.services.kendra.model.CreateExperienceResponse;
import software.amazon.awssdk.services.kendra.model.DescribeExperienceRequest;
import software.amazon.awssdk.services.kendra.model.DescribeExperienceResponse;
import software.amazon.awssdk.services.kendra.model.ExperienceStatus;


public class CreateExperienceExample {

    public static void main(String[] args) throws InterruptedException {
        System.out.println("Create an experience");
        
        String experienceName = "experience-name";
        String experienceDescription = "experience description";
        String indexId = "index-id";
        String experienceRoleArn = "arn:aws:iam::account-id:role/role-name";

        KendraClient kendra = KendraClient.builder().build();
        
        CreateExperienceRequest createExperienceRequest = CreateExperienceRequest 
            .builder()
            .name(experienceName)
            .description(experienceDescription)
            .roleArn(experienceRoleArn)
            .configuration(
                ExperienceConfiguration
                    .builder()
                    .contentSourceConfiguration(
                        ContentSourceConfiguration(
                            .builder()
                            .dataSourceIds("data-source-1","data-source-2")
                            .build()
                        )
                    )
                    .userIdentityConfiguration(
                        UserIdentityConfiguration(
                            .builder()
                            .identityAttributeName("identity-attribute-name")
                            .build()
                        )
                    ).build()
            ).build();
        
        CreateExperienceResponse createExperienceResponse = kendra.createExperience(createExperienceRequest);
        System.out.println(String.format("Experience response %s", createExperienceResponse));

        String experienceEndpoints = createExperienceResponse.endpoints();

        System.out.println(String.format("Wait for Kendra to create the experience.", experienceEndpoints));
        while (true) {
            DescribeExperienceRequest describeExperienceRequest = DescribeExperienceRequest.builder().endpoints(experienceEndpoints).build();
            DescribeExperienceResponse describeEpxerienceResponse = kendra.describeExperience(describeExperienceRequest);
            ExperienceStatus status = describeExperienceResponse.status();
            TimeUnit.SECONDS.sleep(60);
            if (status != ExperienceStatus.CREATING) {
                break;
            }
        }

        System.out.println("Experience creation is complete.");
    }
}
```

------