インデックスを作成してクエリを実行してみた（Amazon Kendra）

## ゴール
[Create and query an index](https://aws.amazon.com/jp/getting-started/hands-on/create-query-index-with-amazon-kendra/?ref=gsrchandson)を参考に、Amazon Kendraでインデックスを作成してクエリを実行することができます。

## スタートライン
- AWSアカウントを持っていること

## ステップ1：IAMユーザーにAmazonKendraFullAccessをアタッチする
任意のIAMユーザーを選択し、「許可を追加」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/f636585e-33a4-dbf5-6a88-370e01c4e36c.png)
　　
「AmazonKendraFullAccess」と検索し、「次」へを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/3bb60907-a242-ba47-067c-02eb3517c158.png)
　　
「許可を追加」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/822a0713-754d-3f3a-e41f-333ec11cefa7.png)

これで任意のIAMユーザーにAmazonKendraFullAccessがアタッチされました。

## ステップ2：Amazon Kendra インデックスを設定する
[Amazon Kendra console](https://console.aws.amazon.com/kendra/)にアクセスし、「Create an Index」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/011f758d-0530-3ae2-09bc-fb588f79bbfe.png)
　　　
以下のように、Index nameとIAM role、Role nameを入力します。各項目名はご自身で
決めてください。入力したら「Next」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/d4fe3ebc-70f6-756d-174a-9647ab8941b3.png)
　　
次の画面では、何も変更せずに「Next」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/f111bb22-1843-3264-e70d-cf897d36ffd4.png)
　　　　
「Developer editions」を選択し、「Next」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/0dcc3e14-74df-3f3b-14d1-ad5bbbbab583.png)
　　
「Create」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/a80e66b4-a13d-b8c0-872b-cdc9bdac3eae.png)
　　
Statusが「Active」になったら、作成完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/655c7b4d-6b23-71c5-374b-02f842aae063.png)


## ステップ3：IAMロールを更新する
[IAM console](https://console.aws.amazon.com/iam/home?region=us-east-1#/home)で先ほど作成したRoleを選択し、「ポリシーをアタッチ」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/f10ba6da-6348-ad2a-97e9-4e3615fbd44c.png)
　　
今回はS3を使うため、「AmazonS3ReadOnlyAccess」と検索し、ヒットしたポリシーにチェックを入れた状態で、「許可を追加」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/02f40b29-6129-166a-b220-a8d713eaf168.png)
　　
許可ポリシーに追加されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/5b441d86-cd12-09a1-5ea7-4cfae0e1c2ab.png)


## ステップ4：データソースへのS3コネクタを構成する
まずは、データソースを作成します。作成したインデックスの画面に移動し、「Data management」の「Data sources」タブを選択すると以下のような画面が表示されるので、「Add data sources」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/d4a5fb8c-8472-0b5e-ff80-d2ca884123bd.png)
　　
Sample　AWS documentationの「Add dataset」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/d19898d1-ebfa-28e0-c35f-aeb1ca616920.png)

Data sourse nameを入力し、Default Languageは「Japanese(ja)」を選択し、「Add data sourse」します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/d14d5a84-0f3f-6c61-67b8-a33bbe67dc73.png)

　　
データソースができるまで少し時間がかかるので、その間にクエリ検索に使うデータをS3にアップロードしましょう。
　　
まずは、使用データを準備します。
[検索インテントを使用してAmazon KendraとAmazon Lex を統合する](https://aws.amazon.com/jp/blogs/news/integrate-amazon-kendra-and-amazon-lex-using-a-search-intent/)に記載されているサンプルデータである、[help-desk-faq.csv](https://aws-ml-blog.s3.amazonaws.com/artifacts/lex-kendra/help-desk-faq.csv)をダウンロードします。
　　
このサンプルデータは英語なので、ChatGPTを使って日本語化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/20684b2c-9592-0958-7df8-abba30a8bc07.png)
　　
以下をコピーされても構いません。

```csv
Question,Answer,URL
ヘルプデスクはどこにありますか？,2階、201号室（エレベーターを降りた後、右に2回曲がってください）。,<document url>
ヘルプデスクの開館時間はいつですか？,営業時間は午前11時から午後2時までです。,<document url>
ラップトップの修理にはどのくらい時間がかかりますか？,ラップトップの修理には通常2時間かかります。,<document url>
スクリーンの修理にはどのくらい時間がかかりますか？,ラップトップのスクリーン修理には通常4時間かかります。,<document url>
バッテリーの修理にはどのくらい時間がかかりますか？,ラップトップのバッテリー修理は通常約1時間かかります。,<document url>
オーディオ問題の修理にはどのくらい時間がかかりますか？,ラップトップのオーディオ修理は通常15-30分かかります。,<document url>
近くにカフェはありますか？,3階にあり、毎日午前8時から午後4時まで営業しています。,<document url>
ラップトップ修理に何を持って行く必要がありますか？,"ラップトップ修理の際は、社員証、ラップトップ、VPNフォブをお持ちください。",<document url>
スクリーン修理に何を持って行く必要がありますか？,"ラップトップスクリーン修理の際は、社員証、ラップトップ、VPNフォブをお持ちください。",<document url>
バッテリー修理に何を持って行く必要がありますか？,"ラップトップバッテリー修理の際は、社員証、ラップトップ、充電ケーブルとアダプター、VPNフォブをお持ちください。",<document url>
オーディオ修理に何を持って行く必要がありますか？,"ラップトップオーディオ修理の際は、社員証、ラップトップ、ヘッドフォン/イヤーポッド、VPNフォブをお持ちください。",<document url>
新しいラップトップに何を持って行く必要がありますか？,"新しいラップトップを受け取る際は、社員証とVPNフォブをお持ちください。",<document url>
ラップトップが修理中の間、ドキュメントにどのようにアクセスしますか？,Amazon Workdocsを使用してドキュメントにアクセスできます。,<document url>
```
　　
これでデータの準備は完了です。
　　
次に、S3のページに移動し、「バケットを作成」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/41b8c8d1-0d60-9a7f-bb8b-96651e57572b.png)
　　
AWSリージョンは「米国東部（バージニア北部）us-east-1、バケットタイプは「汎用」を選択し、バケット名を入力してバケットを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/7eb89bd7-5c84-8d76-1c3c-aa9dd8ad034a.png)
　　
作成したバケットに移動し、「アップロード」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/4fc0625f-ea1d-c439-0eea-d1644c0dc02c.png)
　　
先ほど作成したhelp-desk-faq.csvをアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/1483e02d-31b2-c56c-43d7-10f901254701.png)


## ステップ4：FAQを追加する

Amazon Kendraの「Data management」の「FAQ」タブから「Add FAQ」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/016e264d-5959-eaab-fe9a-2bd59b367cb6.png)
　　
FAQ nameを入力し、Default languageは「Japanese(ja)」を選択します。
FAQ file formatは「.csv file -Basic」を選択し、S3で先ほどアップロードしたhelp-desk-faq.csvのパスを指定し、「Add」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/8e5f175f-8d2b-b05a-9bbe-6b24fc76f3c8.png)
　　
Statusが「Active」になったら追加完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/2a74b4b5-20ae-7b7a-b98d-a5c45c27e2e3.png)


## ステップ5：インデックスをクエリする

「Data management」の「Search indexed content」タブに移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/b0dfca5e-f5e8-3892-d3a5-b5705d98b27d.png)
　　
右側のSettingsのDefault language of sourse documentsから「Japanese(ja)」を選択します。
その後、「ヘルプデスクはどこにありますか？」というクエリを投げると、以下のように結果が返ってきます。
ファイルの内容を元にして回答できています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/7ca3e878-2f99-d431-4a99-d5f34167b225.png)


## フィニッシュ
お疲れ様でした。
値段が高いので、継続的に使用しない場合は今回作成したリソースは削除しましょう。
以下のXでも情報発信してます！

https://twitter.com/t___tatsuki

## 参考文献
https://aws.amazon.com/jp/getting-started/hands-on/create-query-index-with-amazon-kendra/?ref=gsrchandson

https://aws.amazon.com/jp/blogs/news/integrate-amazon-kendra-and-amazon-lex-using-a-search-intent/

https://qiita.com/sugimount-a/items/50370d5781b634bb8d3b