

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 배포 Amazon Kendra
<a name="deploying"></a>

**참고**  
기능 지원은 인덱스 유형 및 사용 중인 검색 API에 따라 다릅니다. 사용 중인 인덱스 유형 및 검색 API에 대해 이 기능이 지원되는지 확인하려면 [인덱스 유형](https://docs.aws.amazon.com/kendra/latest/dg/hiw-index-types.html)을 참조하세요.

웹 사이트에 Amazon Kendra 검색을 배포할 때가 되면 React와 함께 사용하여 애플리케이션을 시작할 수 있는 소스 코드를 제공합니다. 수정된 MIT 라이선스에 따라 소스 코드가 무료로 제공됩니다. 그대로 사용하거나 필요에 따라 변경할 수 있습니다. 제공된 React 앱은 시작하는 데 도움이 되는 예입니다. 프로덕션 지원 앱이 아닙니다.

코드 없이 검색 애플리케이션을 배포하고 액세스 제어가 가능한 검색 페이지의 엔드포인트 URL을 생성하려면 [Amazon Kendra Experience Builder](https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html)를 참조하세요.

다음 예제 코드는 기존 React 웹 애플리케이션에 Amazon Kendra 검색을 추가합니다.
+ [https://kendrasamples.s3.amazonaws.com/kendrasamples-react-app.zip](https://kendrasamples.s3.amazonaws.com/kendrasamples-react-app.zip) - 개발자가 기존 React 웹 애플리케이션에 기능적인 검색 환경을 구축하는 데 사용할 수 있는 샘플 파일입니다.

예제는 Amazon Kendra 콘솔의 검색 페이지 이후에 모델링됩니다. 검색 및 검색 결과 표시 기능은 동일합니다. 전체 예제를 사용할 수도 있고, 기능 중 하나만 선택하여 사용할 수도 있습니다.

 Amazon Kendra 콘솔에서 검색 페이지의 세 가지 구성 요소를 보려면 오른쪽 메뉴에서 코드 아이콘(**</>**)을 선택합니다. 각 섹션 위에 포인터를 놓으면 구성 요소에 대한 간략한 설명과 구성 요소 소스의 URL을 확인할 수 있습니다.

**Topics**
+ [개요](#example-overview)
+ [사전 조건](#example-prereqs)
+ [예제 설정](#example-install)
+ [기본 검색 페이지](#main-component)
+ [검색 구성 요소](#search-component)
+ [결과 구성 요소](#results-component)
+ [패싯 구성 요소](#facets-component)
+ [페이지 매김 구성 요소](#pagination-component)
+ [코드 없이 검색 환경 구축](deploying-search-experience-no-code.md)

## 개요
<a name="example-overview"></a>

기존 React 웹 애플리케이션에 예제 코드를 추가하여 검색을 활성화합니다. 예제 코드에는 새로운 React 개발 환경을 설정하는 단계가 포함된 Readme 파일이 포함되어 있습니다. 코드 예제의 예제 데이터를 사용하여 검색을 시연할 수 있습니다. 예제 코드의 검색 파일 및 구성 요소는 다음과 같이 구성되어 있습니다.
+ 기본 검색 페이지(`Search.tsx`) - 모든 구성 요소가 포함된 기본 페이지입니다. 여기에서 애플리케이션을 Amazon Kendra API와 통합합니다.
+ 검색 창 - 사용자가 검색어를 입력하고 검색 함수를 호출하는 구성 요소입니다.
+ 결과 - 결과를 표시하는 구성 요소입니다 Amazon Kendra. 제안된 답변, FAQ 결과, 권장 문서라는 세 가지 구성 요소로 구성됩니다.
+ 패싯 - 검색 결과에 패싯을 표시하는 구성 요소로, 패싯을 선택하여 검색 범위를 좁힐 수 있습니다.
+ 페이지 매김 - Amazon Kendra의 응답에 페이지를 매기는 구성 요소입니다.

## 사전 조건
<a name="example-prereqs"></a>

시작하려면 다음이 필요합니다.
+ Node.js 및 npm이 [설치되었습니다](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm). Node.js 버전 19 이상이 필요합니다.
+ Python 3 또는 Python 2가 [다운로드 및 설치되었습니다](https://www.python.org/downloads/).
+  Amazon Kendra에 대한 API 호출이 가능한 [SDK for Java](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html) 또는 [AWS SDK for JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/latest/developer-guide/welcome.html).
+ 기존 React 웹 애플리케이션. 예제 코드에는 필수 프레임워크/라이브러리 사용을 포함하여 새로운 React 개발 환경을 설정하는 방법에 대한 단계가 포함된 Readme 파일이 포함되어 있습니다. [React 웹 앱 생성에 대한 React 설명서](https://create-react-app.dev/docs/getting-started)의 빠른 시작 지침을 따를 수도 있습니다.
+ 개발 환경에 구성된 필수 라이브러리 및 종속성. 예제 코드에는 필수 라이브러리와 패키지 종속성을 나열하는 Readme 파일이 포함되어 있습니다. 더 이상 `node-sass`가 사용되지 않으므로 `sass`가 필수 항목입니다. 이전에 `node-sass`를 설치한 경우, 제거하고 `sass`를 설치합니다.

## 예제 설정
<a name="example-install"></a>

React 애플리케이션에 Amazon Kendra 검색을 추가하는 전체 절차는 코드 예제에 포함된 Readme 파일에 있습니다.

**kendrasamples-react-app.zip 사용을 시작하려면**

1. Node.js 및 npm 다운로드 및 설치를 포함한 [사전 조건](#example-prereqs) 작업을 완료했는지 확인하세요.

1. kendrasamples-react-app.zip 다운로드 후 압축을 해제합니다.

1. 터미널을 열고 `aws-kendra-example-react-app/src/services/`로 이동합니다. `local-dev-credentials.json` 열고 보안 인증을 제공합니다. 이 파일을 퍼블릭 리포지토리에 추가하면 안 됩니다.

1. `aws-kendra-example-react-app`으로 이동하여 `package.json`의 종속성을 설치합니다. `npm install`를 실행합니다.

1. 로컬 서버에서 앱의 데모 버전을 실행합니다. `npm start`를 실행합니다. 키보드로 `Cmd/Ctrl + C`를 입력하여 로컬 서버를 중지할 수 있습니다.

1. `package.json`으로 이동하여 포트 또는 호스트(예: IP 주소)를 변경하고 호스트 및 포트를 업데이트할 수 있습니다. `"start": "HOST=[host] PORT=[port] react-scripts start"`. Windows를 사용하는 경우: `"start": "set HOST=[host] && set PORT=[port] && react-scripts start"`.

1. 등록된 웹사이트 도메인이 있는 경우 앱 이름 뒤의 `package.json`에 이를 지정할 수 있습니다. 예를 들어 `"homepage": "https://mywebsite.com"`입니다. `npm install`을 다시 실행하여 새 종속성을 업데이트한 다음 `npm start`를 실행해야 합니다.

1. 앱을 빌드하려면 `npm build`를 수행합니다. 빌드 디렉터리의 콘텐츠를 호스팅 제공업체에 업로드합니다.
**주의**  
React 앱은 아직 프로덕션 준비가 되지 **않았습니다**. Amazon Kendra 검색을 위해 앱을 배포하는 예입니다.

## 기본 검색 페이지
<a name="main-component"></a>

기본 검색 페이지(`Search.tsx`)에는 모든 예제 검색 구성 요소가 들어 있습니다. 여기에는 출력용 검색 창 구성 요소, [Query](https://docs.aws.amazon.com/kendra/latest/APIReference/API_Query.html) API의 응답을 표시하는 결과 구성 요소, 응답을 통한 페이징을 위한 페이지 매김 구성 요소가 포함됩니다.

## 검색 구성 요소
<a name="search-component"></a>

검색 구성 요소는 쿼리 텍스트를 입력할 수 있는 텍스트 상자를 제공합니다. `onSearch` 함수는 `Search.tsx`에서 기본 함수를 호출하여 Amazon Kendra [Query](https://docs.aws.amazon.com/kendra/latest/APIReference/API_Query.html) API 호출을 수행하는 후크입니다.

## 결과 구성 요소
<a name="results-component"></a>

결과 구성요소는 `Query` API의 응답을 보여줍니다. 결과는 세 개의 개별 영역에 표시됩니다.
+ 제안된 답변 - `Query` API에서 가장 많이 반환된 결과입니다. 제안된 답변은 최대 3개까지 포함됩니다. 응답에는 `ANSWER` 결과 유형이 있습니다.
+ FAQ 답변 - 응답에서 반환하는 자주 묻는 질문 결과입니다. FAQ는 인덱스에 별도로 추가됩니다. 응답에는 `QUESTION_ANSWER` 유형이 있습니다. 자세한 내용은 [질문 및 답변](https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html)을 참조하세요.
+ 권장 문서 - 응답에서가 Amazon Kendra 반환하는 추가 문서입니다. `Query` API의 응답에는 `DOCUMENT` 유형이 있습니다.

결과 구성 요소는 강조 표시, 제목, 링크 등의 기능에 대한 구성 요소 세트를 공유합니다. 결과 구성 요소가 작동하려면 공유 구성 요소가 있어야 합니다.

## 패싯 구성 요소
<a name="facets-component"></a>

패싯 구성 요소는 검색 결과에서 사용할 수 있는 패싯을 나열합니다. 각 패싯은 작성자와 같은 특정 차원에 따라 응답을 분류합니다. 목록에서 하나를 선택하여 특정 패싯으로 검색을 세분화할 수 있습니다.

패싯을 선택하면 구성 요소가 속성 필터로 `Query`를 호출하여 검색을 패싯과 일치하는 문서로 제한합니다.

## 페이지 매김 구성 요소
<a name="pagination-component"></a>

페이지 매김 구성 요소를 사용하면 `Query` API의 검색 결과를 여러 페이지에 표시할 수 있습니다. `PageSize` 및 `PageNumber` 파라미터와 함께 `Query` API를 호출하여 특정 결과 페이지를 가져옵니다.

# 코드 없이 검색 환경 구축
<a name="deploying-search-experience-no-code"></a>

프런트엔드 코드 없이 Amazon Kendra 검색 애플리케이션을 빌드하고 배포할 수 있습니다. Amazon Kendra *Experience Builder*를 사용하면 클릭 몇 번으로 모든 기능을 갖춘 검색 애플리케이션을 구축하고 배포하여 즉시 검색을 시작할 수 있습니다. 검색 페이지를 사용자 지정 설계하고 사용자의 필요에 맞게 검색을 조정할 수 있습니다.는 검색 페이지의 고유한 완전 호스팅 엔드포인트 URL을 Amazon Kendra 생성하여 문서 및 FAQs 검색을 시작합니다. 검색 경험에 대한 개념 증명을 신속하게 구축하여 다른 사람들과 공유할 수 있습니다.

빌더에 제공되는 검색 경험 템플릿을 사용하여 검색을 사용자 지정할 수 있습니다. 검색 경험을 구축하기 위해 협업하거나 조정 목적으로 검색 결과를 평가할 다른 사람들을 초대할 수 있습니다. 사용자가 검색을 시작할 수 있는 검색 환경이 준비되면 보안 엔드포인트 URL을 공유하기만 하면 됩니다.

## 검색 Experience Builder의 작동 방식
<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 검색하고 가장 관련성이 높은 답변을 제안할 수 있습니다.

### FAQ
<a name="search-experience-faq"></a>

FAQ 문서를 추가하여 자주 묻는 질문에 대한 답변을 제공합니다. 예를 들어 *'이 과정을 완료하는 데 몇 시간이 걸리나요?'*. Amazon Kendra 는이 질문에 대한 답변이 포함된 FAQ 문서를 사용하고 올바른 답변을 제공할 수 있습니다.

### 정렬
<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\$110의 가중치를 부여합니다. 각 검색 애플리케이션 또는 경험에 대해 서로 다른 관련성 조정 구성을 적용할 수 있습니다.

## 검색 페이지에 대한 액세스 권한 제공
<a name="access-search-experience"></a>

검색 환경에 대한 액세스는 IAM Identity Center를 통해 이루어집니다. 검색 환경을 구성할 때 Identity Center 디렉터리에 나열된 다른 사용자에게 Amazon Kendra 검색 페이지에 대한 액세스 권한을 부여합니다. 해당 사용자는 IAM Identity Center의 보안 인증을 사용하여 로그인하여 검색 페이지에 액세스하도록 지시하는 이메일을 받습니다. AWS Organizations에 조직 수준 또는 계정 소유자 수준에서 IAM Identity Center를 설정해야 합니다. IAM Identity Center 설정에 대한 자세한 내용은 [IAM Identity Center 시작하기](https://docs.aws.amazon.com/kendra/latest/dg/getting-started-aws-sso.html)를 참조하세요.

IAM Identity Center에서 검색 환경으로 사용자 ID를 활성화하고, API 또는 콘솔을 사용하여 *최종 사용자* 또는 *소유자*에게 액세스 권한을 할당합니다.
+ **최종 사용자**: 쿼리를 발행하고, 검색과 관련하여 제안된 답변을 받고, Amazon Kendra 에 피드백을 제공하여 검색을 지속적으로 개선할 수 있도록 허용했습니다.
+ **소유자**: 검색 페이지 디자인을 사용자 지정하고, 검색을 조정하고, 검색 애플리케이션을 *최종 사용자*로 사용하도록 허용했습니다. 콘솔에서 최종 사용자 액세스를 비활성화하는 기능은 현재 지원되지 않습니다.

다른 사용자에게 검색 환경에 대한 액세스 권한을 할당하려면 먼저 [ExperienceConfiguration](https://docs.aws.amazon.com/kendra/latest/APIReference/API_ExperienceConfiguration.html) 객체를 사용하여 IAM Identity Center에서 Amazon Kendra 사용자 ID를 활성화해야 합니다. 사용자 이름 또는 이메일 주소와 같이 사용자 식별자가 포함된 필드 이름을 지정합니다. 그런 다음 [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) 객체를 사용하여 해당 사용자 또는 그룹이 *뷰어*인지 *소유자*인지 지정합니다.

콘솔을 사용하여 다른 사용자에게 검색 환경에 대한 액세스 권한을 할당하려면 먼저 경험을 만들고 자신의 ID와 소유자임을 확인해야 합니다. 그런 다음 다른 사용자나 그룹을 최종 사용자 또는 소유자로 할당할 수 있습니다. 콘솔에서 색인을 선택한 다음 탐색 메뉴에서 **경험**을 선택합니다. 경험을 만든 후 목록에서 경험을 선택할 수 있습니다. **액세스 관리**로 이동하여 사용자 또는 그룹을 최종 사용자 또는 소유자로 할당합니다.

## 검색 환경 구성
<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 확인** 페이지에서 사용자 ID(예: 이메일)를 선택합니다. Identity Center 디렉터리가 없는 경우 전체 이름과 이메일을 입력하여 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.");
    }
}
```

------