

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 无需代码即可打造搜索体验
<a name="deploying-search-experience-no-code"></a>

无需任何前端代码即可构建和部署 Amazon Kendra 搜索应用程序。 Amazon Kendra 只需点击几下，*Experience Builder* 即可帮助您构建和部署功能齐全的搜索应用程序，这样您就可以立即开始搜索。您可以自定义设计搜索页面并调整搜索，以根据用户的需求量身定制体验。 Amazon Kendra 为您的搜索页面生成一个唯一的、完全托管的端点 URL，以开始搜索您的文档，然后 FAQs。您可以快速建立搜索体验的概念证明，并与他人分享。

您可以使用构建器中提供的搜索体验模板来自定义搜索。您可以邀请其他人合作打造您的搜索体验，也可以评估搜索结果以进行调整。一旦您的搜索体验准备就绪，可供用户开始搜索，就只需共享安全端点 URL。

## 搜索 Experience Builder 的工作原理
<a name="how-search-experience-builder-works"></a>

构建搜索体验的总体过程如下所述：

1. 您可以通过为搜索体验命名、描述并选择要用于搜索体验的数据来源来创建搜索体验。

1. 您可以在中配置您的用户和群组列表， AWS IAM Identity Center 然后为他们分配搜索体验的访问权限。您将自己列为体验的所有者。有关更多信息，请参阅 [提供对搜索页面的访问权限](#access-search-experience)。

1. 您可以打开 Amazon Kendra 体验生成器来设计和调整搜索页面。您可以与您分配了自己的编辑访问权限或查看搜索访问权限的其他人共享您的搜索体验的端点 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 可以使用包含此问题答案的常见问题解答文档并给出正确的答案。

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

添加对搜索结果的排序，以便您的用户可以按相关性、创建时间、上次更新时间和其他排序标准来组织结果。

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

配置文档或搜索结果在搜索页面上的显示方式。您可以配置页面上显示多少结果，包括页码等分页，激活用户反馈按钮，以及安排文档元数据字段在搜索结果中的显示方式。

### 语言
<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 身份中心访问您的搜索体验。配置搜索体验时，您授予身份中心目录中列出的其他人访问您的 Amazon Kendra 搜索页面的权限。他们会收到一封电子邮件，指示他们使用自己在 IAM Identity Center 中的证书登录以访问搜索页面。您必须在 AWS Organizations中的组织级别或账户持有人级别设置 IAM 身份中心。有关设置 IAM IAM Identy 的更多信息，请参阅 [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 体验。您可以指定包含用户标识符（例如用户名或电子邮件地址）的字段名称。然后，您可以使用 API 向您的用户列表授予访问您的搜索体验的权限，并使用 [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)您可以指定使用该[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 角色的更多信息，请参阅[Amazon Kendra 体验版 IAM 角色](https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html)。

1. 在**通过 Identity Center 目录确认您的身份**页面上，选择您的用户 ID，例如，您的电子邮件地址。如果您没有 Identity Center 目录，只需输入您的全名和电子邮件即可创建身份中心目录。这包括作为体验用户的您，并会自动为您分配所有者访问权限。

1. 在**查看以打开 Experience Builder** 页面上，查看您的配置详细信息，然后选择**创建体验并打开 Experience Builder** 以开始编辑您的搜索页面。

------
#### [ 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.");
    }
}
```

------