Amazon Kendraの日本語対応状況とサービス利便性を確認してみました【2022年12月時点】

師走の恒例となっているQiitaの『[株式会社日立システムズ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/hisys)』。

<img width="400" alt="christmas_tree_advent_calender_eve.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/0e818428-0b86-feaf-3f51-3609c85680a8.png">

今年も記事を書いてみようと思います。

<B><font color="Red">なお、記載内容は個人的なものであり、
所属する企業や組織、団体を代表する見解その他ではありませんので、
ご承知おきください。</font></B>



さて、何を記載しようかと考えたのですが、
せっかくなので、日頃は使っていないサービスを検証してみたいと思いました。
その結果、「[Amazon Kendra](https://aws.amazon.com/jp/kendra/)」にしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/bdb570f6-de02-c65f-7165-0cb3602a7186.png)
なぜ、「Amazon Kendra」にしたかというと、先日開催された「[AWS re:Invent 2022](https://aws.amazon.com/jp/kendra/)」で、2つのアップデートが発表されて気になっていたからです。

### 発表１：[セマンティック検索の言語サポートを拡張](https://aws.amazon.com/jp/about-aws/whats-new/2022/11/amazon-kendra-expanded-language-support-semantic/)

:::note info
Kendra のセマンティック検索の言語サポートを拡張し、スペイン語、フランス語、ドイツ語、ポルトガル語、<font color="Red">日本語</font>、韓国語、中国語の 7 言語を新しく追加しました。

これらの言語のコンテンツにおいて、よくある質問のマッチング、ドキュメントランキング、質問に対する回答を含む Kendra の幅広いセマンティック機能をご利用いただけるようになりました。新しい言語の機能はデフォルトで有効となっており、特別な設定や構成をしなくてもすぐにご利用いただけます。
:::

### 発表２：[HTML ドキュメントの表形式検索が利用可能に](https://aws.amazon.com/jp/about-aws/whats-new/2022/11/amazon-kendra-tabular-search-html-documents/)

:::note info
Kendra で、HTML ページの埋め込みテーブルから、より直感的かつ効率的に検索できる、表形式検索がサポートされました。

Amazon Kendra で HTML の表形式検索を使用して、「ビジネスクレジットカードの APR」や「年会費が最も安いクレジットカード」のように検索すると、質問の回答を含むクレジットカード比較表がマーケティングウェブページに表示されます。表形式検索は、幅広い HTML 表形式やドメインにデフォルトで対応しているため、特別な設定や構成は必要ありません。
:::

特に気になったのは「<font color="Red">セマンティック検索に日本語が対応した</font>」という発表です。
これでかなり日本語での利便性も向上するのでは？と思い、実際に確認してみる事にした訳です。
また、Amazon Kendra自体のサービス内容についても、今回十分に確認してみたいと思いました。

ですので、今回の記事の内容は、以下の2点がポイントとなります。

<B>ポイント１：「Amazon Kendra」の日本語対応の状況について
ポイント２：「Amazon Kendra」システムの利便性について</B>


# １．そもそもAmazon Kendraとは？
そもそも「[Amazon Kendra](https://aws.amazon.com/jp/kendra/)」とは何かについてご説明します。
知っている方は、「１.」はまるまる飛ばして「２.」にお進みください。

読み方は「ケンドラ」です。
公式の説明は以下の通りです。

:::note info
Amazon Kendra は、ユーザーが自然言語処理と高度な検索アルゴリズムを使用して非構造化データと構造化データを検索できるようにする、非常に正確でインテリジェントな検索サービスです。質問に対する具体的な回答を返し、人間の専門家との対話に近いエクスペリエンスをユーザーに提供します。スケーラビリティが高く、パフォーマンスの要求を満たすことができ、 Amazon S3やAmazon Lexなどの他の AWS サービスと緊密に統合され、エンタープライズ レベルのセキュリティを提供します。
:::

:::note warn
単的に表現すると、S3などに格納されているデータから情報を抽出し、検索可能な状態にして提供してくれるサービスです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/b29226cd-e76a-f5ff-f471-5004ea3c22cb.png)
:::


利用上の利点として「精度」「シンプルさ」「接続性」「ユーザアクセス制御」という『[4つの利点](https://docs.aws.amazon.com/kendra/latest/dg/what-is-kendra.html)』があげられています。このうち「精度」には「質問の文脈を理解する」との記載があり、これが今回「日本語対応」された「セマンティック検索」を指しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/cbb27c63-dddb-7830-9218-968819becbf9.png)

ちなみに「ケンドラ」の名前の由来はちょっと気になっています。
普通に考えると女性の名前なのですが……。なぜ「ケンドラ」なのか？？？？

<img width="400" alt="whitewoman1_laugh.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/64e25700-8dc1-effa-0924-1073edbe0fca.png">

もし、ご存じの方がいれば教えてください。

なお、「Amazon Kendra」の詳細は以下のドキュメントがありますので、もう少し詳しく知りたい方はご確認ください。

| 資料名 | 説明内容 |
|:-----------|:-----------|
 |[Developer Guide](https://docs.aws.amazon.com/kendra/latest/dg/what-is-kendra.html)|Amazon Kendra の概念的な概要を提供します。Amazon Kendra の機能について学び、コンソール、AWS CLI、および API を使用してドキュメントのインデックス作成を開始します。<br>|
 |[API Reference](https://docs.aws.amazon.com/kendra/latest/dg/API_Reference.html)|Amazon Kendra の API オペレーションについて説明します。これには、各 API の要求パラメーターと応答要素、および一般的なエラーが含まれます。<br>|


# ２．アップデートの内容について
「Amazon Kendra」について理解できたところで、今回のアップデートの内容を確認します。

## 発表１：セマンティック検索の言語サポートを拡張

:::note info
Kendra のセマンティック検索の言語サポートを拡張し、スペイン語、フランス語、ドイツ語、ポルトガル語、<font color="Red">日本語</font>、韓国語、中国語の 7 言語を新しく追加しました。

これらの言語のコンテンツにおいて、よくある質問のマッチング、ドキュメントランキング、質問に対する回答を含む Kendra の幅広いセマンティック機能をご利用いただけるようになりました。新しい言語の機能はデフォルトで有効となっており、特別な設定や構成をしなくてもすぐにご利用いただけます。
:::

『<font color="Red">セマンティック検索に日本語が対応した</font>』という部分が重要です。
そもそもセマンティック検索は、以下の通りです。

:::note warn
セマンティック検索とは、ユーザーが検索エンジンに入力する語句（検索クエリ）が会話文のようにあいまいな場合であっても、ユーザーの検索意図（目的）を検索エンジンが理解し、ユーザーの求めるものに適合した検索結果を提供する技術・概念のことです。
:::

そして、「Amazon Kendra」で[セマンティック検索のサポート有無による機能の違い](https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html)は以下の通りです。

|サポート有無| 内容 |
|:-----------|:-----------|
 |無し|ドキュメントの関連性と FAQ に対して単純なキーワードマッチングがサポートされています。<br>|
 |有り|次の機能がサポートされています。<br><br>・単純なキーワード マッチングを超えたドキュメントの関連性。<br>・単純なキーワード マッチングを超えたFAQ。<br>・Amazon Kendra の読解力に基づいて、ドキュメントから回答を抽出。<br>・検索結果の信頼度バケット (非常に高い、高い、中、低い)。<br><br>|

曖昧な表現が多いですが、サポートの有無でかなりの機能差がありことは確かです。
今回のアップデートで日本語が含まれたことで、かなり検索結果に期待が持てるようになりました。

ただ、注意点があります。

:::note warn
シノニム (カスタム シノニムを含む)、増分学習とフィードバック、およびクエリの提案は、<font color="Red">英語 (既定の言語) でのみサポート</font>されています。
:::

やはり、まだ「英語」でないと利用できない機能も多い訳です。
記載されている機能の内容は以下の通りです。

| 区分 | 内容 |
|:-----------|:-----------|
|[シノニム](https://docs.aws.amazon.com/ja_jp/kendra/latest/dg/index-synonyms-creating-thesaurus-file.html)<br>※[カスタムシノニム含む](https://docs.aws.amazon.com/kendra/latest/dg/index-synonyms.html)|同義語のデータをインポートして、検索結果を改善する機能です。<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/7ae8eee5-8e1e-cdc9-51dd-d8ccaa7973df.png)<br><br>|
|[増分学習とフィードバック](https://docs.aws.amazon.com/ja_jp/kendra/latest/dg/submitting-feedback.html)|Amazon Kendra増分学習を使用して検索結果を改善します。クエリからのフィードバックを使用して、増分学習によってランク付けアルゴリズムが改善され、検索結果が最適化され、精度が向上します。<br>|
|[クエリの提案]()|Amazon Kendraクエリ履歴でユーザーに関連するクエリを提案します。Amazon Kendraは、ユーザーが検索し、これらのクエリから学習したすべてのクエリを使用して、ユーザーに提案を行います。<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/3cbe16c1-ff12-1ef1-0f48-8c8f18d15b8b.png)<br><br>|

結構価値のある機能が「日本語」では使えていないような気がしますね。
まだまだ「英語」と「日本語」の機能には大きな差があります。


## 発表２：HTML ドキュメントの表形式検索が利用可能に

:::note info
Kendra で、HTML ページの埋め込みテーブルから、より直感的かつ効率的に検索できる、表形式検索がサポートされました。

Amazon Kendra で HTML の表形式検索を使用して、「ビジネスクレジットカードの APR」や「年会費が最も安いクレジットカード」のように検索すると、質問の回答を含むクレジットカード比較表がマーケティングウェブページに表示されます。表形式検索は、幅広い HTML 表形式やドメインにデフォルトで対応しているため、特別な設定や構成は必要ありません。
:::

この機能もあれば嬉しい機能なのですが、よく見ると注意書きがあります。

:::note warn
Amazon Kendra は、table タグ内にある HTML テーブルを含む<font color="Red">英語のドキュメントのみをサポート</font>します。
:::

そうです。こちらの機能も残念ながら「日本語」では利用できないのです。


## アップデートの内容を受けて
アップデートの内容を元に確認しましたが、「日本語」対応についてはまだまだ対応中の内容が多いのが実態のようです。
ただ、「セマンティック検索」機能が「日本語対応」したのは事実です。
この機会にサービスを実際に利用してみて、検証してみたいと思います。
「Amazon Kendra」サービスの利便性については、とても気になるところです。
３．～４．はその内容を記載します。

# ３．Amazon Kendraサービスの検証

実際の動作について検証するために、「Amazon Kendra」サービスを利用してみます。
今回の環境に関しては、以下の状態が最終系になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/b21e6e58-7b3f-547c-1230-34859f26b2c5.png)

:::note info
今回は、データソースとして「S3」から「PDFファイル」や「FAQファイル」を「Amazon Kendra」に連携し、その結果を検索サービスとして「AWSアクセスポータル」経由で公開するところまで進めます。流れが分かるように、随時で上記の図を元に作業箇所を示すようにします。
:::

まず、3章では以下の赤枠の部分が作業範囲となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/b694c147-de39-f8ba-6f57-8cccfd91949f.png)


:::note info
3章は、データソースとして「S3」から「PDF」ファイルや「FAQ」ファイルを「Amazon Kendra」に連携し検索テストを実施するところまでの対応になります。
:::

## ３．１　リージョンの選定
「Amazon Kendra」が利用できるリージョンは以下の通りです。
「セマンティック検索」は「日本語対応」したけれど、まだ<font color="Red">「東京リージョン」「大阪リージョン」では利用できません。</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/60ca1328-da79-546f-251f-9656e987f27f.png)

:::note warn
他にも機能によっては利用リージョンが制限されるものがあります。例えば[VPC で構成されたデータベースデータソースの場合は、サブネットが次のアベイラビリティー ゾーン ID のいずれかにある必要がある](https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html)ようです。本番利用される際には、自分の利用したい機能が利用可能なリージョンなのかを確認の上、選定してください。

・米国西部 (オレゴン) — usw2-az1、usw2-az2、usw2-az3
・米国東部 (バージニア北部) — use1-az1、use1-az2、use1-az4
・EU (アイルランド) — euw1-az1、uew1-az2、euw1-az3

:::

今回は「米国東部(バージニア北部 us-east-1」で実施します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/4b4a6ec3-716b-8ad3-8709-15c639180060.png)


## ３．２　インデックスの作成
続いて「[インデックスを作成](https://docs.aws.amazon.com/kendra/latest/dg/create-index.html?icmpid=docs_console_unmapped)」します。
作業範囲は以下となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/3e652411-d4aa-757d-7527-5d88ff55db25.png)

:::note info
「Amazon Kendra」ではまず最初にインデックスを作成する必要があります。この作成した「インデックス」領域でデータソースとの連携や検索サービスの公開を実施します。
:::


:::note warn
「Amazon Kendra」のコンソール画面はまだ日本語化されていません。ですので以降のコンソール画面操作が英語になっていますのでご了承ください。こちらも日本語化してほしいところです。
:::

まずは「Create an Index」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/70867d33-9f82-9004-14f3-266ac6001748.png)

「Index name」を入力し、「IAM role」を新規作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/9cf5e166-d6bf-e82a-4b67-a53a0f8d3036.png)

:::note info
「Use an AWS KMS managed encryption key」を選択すると[保存データの暗号化](https://docs.aws.amazon.com/kendra/latest/dg/encryption-at-rest.html)が可能です。AWS Key Management Service (AWS KMS) でアカウント内にあるキーを指定します。KMS キーを指定しない場合、Amazon Kendra はデフォルトのキーを使用してインデックス内の情報を暗号化します。
:::

[「Configure user access control」](https://docs.aws.amazon.com/kendra/latest/dg/create-index-access-control.html)画面が表示されるので、ここでは特に設定せずに、「NEXT」で処理を進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/813cfe26-ac54-4f96-9a76-10b8a38c20ac.png)

[「Specify provisioning」](https://docs.aws.amazon.com/kendra/latest/dg/what-is-kendra.html?icmpid=docs_console_unmapped#akee)画面が表示されます。ここは費用や性能に関わるところなので重要です。「Developer Edition」と「Enterprise Edition」の2つのエディションが準備されています。以下は簡単な差異の情報ですが、詳細を知りたい方は「[料金表](https://aws.amazon.com/jp/kendra/pricing/)」をご確認ください。

| 機能 |Developer Edition|Enterprise Edition| 
|:-----------|:-----------|:-----------|
|データソース|それぞれ最大 5 つのデータ ソースを持つ最大 5 つのインデックス|それぞれ最大 50 のデータ ソースを持つ最大 5 つのインデックス|
|ストレージ|10,000 ドキュメントまたは 3 GB の抽出テキスト|100,000 ドキュメントまたは 30 GB の抽出テキスト|
|処理能力|1 日あたり約 4,000 クエリ、または 1 秒あたり約 0.05 クエリ|1 日あたり約 8,000 クエリ、または 1 秒あたり約 0.1 クエリ|
|AZ|1 つのアベイラビリティ ゾーン (AZ) で実行 |3 つのアベイラビリティ ゾーン (AZ) で実行 |
|用途|主に開発用|主に本番用|
|料金|安価|標準|

ここは検証目的なので「Developer edition」で進めます。そのまま「Create]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/c0dbf512-5899-017a-b345-f1b379068d96.png)

:::note warn
「Amazon Kendra」は<font color="Red">基本的に従量課金制</font>です。「Developer edition」が安価とはいえ、そのまま環境を残していると着実に課金されます。検証目的の場合は一定のめどがついた段階で「[インデックスとデータソースの削除](https://docs.aws.amazon.com/kendra/latest/dg/delete-index.html)」を実施して環境を削除することをお勧めします。
:::

インデックスの作成が開始されます。
「30 分かかる場合があります。」と表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/2edb349e-5d69-c15b-916d-52d0dcb9b972.png)
正直、30分はかかっていません。15分以内には終わっていたと思います。


## ３．３　データソースの作成
続いて「[データソースの作成](https://docs.aws.amazon.com/kendra/latest/dg/data-source.html)」をします。
作業範囲は以下となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/e2b12b56-2bf2-d3bc-5be7-9d360db5f234.png)

:::note info
データソースは、「Amazon Kendra」が接続してドキュメントまたはコンテンツのインデックスを作成するデータリポジトリまたは場所です。「Amazon Kendra」を設定して、このソースに保存されているドキュメントをクロールしてインデックス化する手順になります。
:::

登録できる[ドキュメントの種類](https://docs.aws.amazon.com/kendra/latest/dg/index-document-types.html)があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/3104a04f-fe6f-85c5-9ee6-d079c37836b4.png)
今回は「非構造化テキスト」の取り込み手順で、「PDF」ファイルを登録します。

また、[データソースを選択する](https://docs.aws.amazon.com/kendra/latest/dg/hiw-data-source.html)必要があります。AWSサービスなら「S3」や「RDS」、「FSx」などを選択することができます。他者サービスなら「box」や「GoogleDrive」、「OneDrive」などと連携することができます。また、「Web Crawler」という機能をりようして、Webサイトの情報を収集することも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/38595f63-d5e7-cdd8-d908-4df552eefab0.png)

:::note info
基本的に、各データソースとの連携方法や前提条件は「[データソース](https://docs.aws.amazon.com/kendra/latest/dg/hiw-data-source.html)」に記載されています。連携したいデータソースの情報を確認すれば、対応が可能かと思います。
:::

今回は「[S3を利用する手順](https://docs.aws.amazon.com/kendra/latest/dg/data-source-s3.html)」で実施します。
「S3」には事前に「バケット」を作成し、「PDFファイル」を格納しています。
今回は検証という事もあり、10ファイル程の保存としています。

「Add connector」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/70e8318d-1761-3797-b944-c4b47aceb22a.png)

「Specify data source details」画面で「Data souce name」を入力します。
そして<font color="Red">「language」を「Japanese(ja)」</font>にします。ドキュメントをインデックス用にフィルター処理するための言語設定です。
入力が完了したら「Next」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/1b2cae5a-c0b4-df94-d6f8-874ce0aad66d.png)

「Define access and spcurity」画面で「IAM role」を新規作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/d9c0dc23-fc4a-dba9-2ab3-fb182642ae44.png)

「Configure sync settings」画面に遷移します。
「Sync scope」では事前に準備した「PDFファイル」を格納した「S3」の「バケット」を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/304bd975-76a3-809c-fa2e-bdaea5d74e3e.png)

そして「Sync run schedule」でデータの同期タイミングを設定します。
「Next」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/cea90fa0-6bf0-ef95-83a0-df9d3c446840.png)

「Set field mappings - optional」画面が表示されるので、「Next」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/0d9e51e2-d9ae-1b82-6961-73905a6251dd.png)
「Review and create」画面が表示されるので「Add data souce」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/d8a9bf36-bc40-2f2a-7498-176565477be8.png)
これでデータソースの追加処理が開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/be971240-226b-d224-f74e-2765146d9651.png)

状態が「Data souce state」が「Active」になったら作成完了です。
次に対象のデータソースを選択して、「Sync Now」で同期処理を開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/3e60b194-3cd4-daf7-270f-ca59e27f2aab.png)
今回は10個のPDFファイルでしたので、5分以内に終了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/1e427950-c1b8-7d12-bae6-6d5742ac4b80.png)

:::note warn
データ ソースを同期処理の中では以下の2つの処理が実施されます。そして、同期速度は、リモート リポジトリのスループットとスロットリング、ネットワーク帯域幅、ドキュメントのサイズなどの要因によって制限されます。数分で終わることもあれば数時間かかることもあります。

・ドキュメントがクロールされ、インデックスを作成するドキュメントが決定されます。
・選択したドキュメントが索引付けされます。
:::

## ３．４　動作確認
同期が完了したら「Search indexed content」で動作確認を実施できます。
作業範囲は以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/cc591dee-0507-d295-182f-a6ad67aeac13.png)

:::note info
「Amazon Kendra」のコンソール画面内にある「Search indexed content」画面で検索テストを実施できます。ここではその確認を実施します。
:::

「Search indexed content」を選択すると、検索画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/adb9baff-5d7f-dd7d-3365-a488028ef498.png)

まず、<font color="Red">「Settings」で「Langage」を「Japanese(ja)」に変更</font>します。
これを忘れると、何も検索結果にヒットしません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/5dd2f1dd-1a40-6249-355d-f34ba8907258.png)
その上で「Enter a text query」に検索条件を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/8c896836-12ef-3791-7ab9-7c21eeac889f.png)
対象の文言を含んだ資料が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/94b9c6bc-5dcd-86ef-e24e-c30a6d9264e7.png)

ここで思い出してほしいのが、アップデートの内容である「セマンティック検索」です。

:::note info
Kendra のセマンティック検索の言語サポートを拡張し、スペイン語、フランス語、ドイツ語、ポルトガル語、<font color="Red">日本語</font>、韓国語、中国語の 7 言語を新しく追加しました。

これらの言語のコンテンツにおいて、よくある質問のマッチング、ドキュメントランキング、質問に対する回答を含む Kendra の幅広いセマンティック機能をご利用いただけるようになりました。新しい言語の機能はデフォルトで有効となっており、特別な設定や構成をしなくてもすぐにご利用いただけます。
:::

ということで、色々検索してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/317f4dab-4838-e2c9-0ab4-a374433cca1b.png)
色々検索………。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/802750ce-c69a-306a-904a-48b3da56eb79.png)
という形で、色々と検索を試してみましたが、「セマンティック検索」の効果がなかなか判断しにくいところです。このアップデート前後での比較がしたかったところです。今回関心を持った方がおられましたら、是非自分のデータを同期させて、その性能を確認してみてください。

:::note info
なお、データソースに関して補足です。
データソースは1つのインデックスに対して複数登録することが可能です。データソース単位で同期タイミングなどを設定可能です。データソース自体の更新頻度などを加味して、登録を分割するなど、運用面を考慮した設定ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/e8fdbf39-cc39-72d8-2db1-5c71d1c420ee.png)

幾つかのデータソースを連携してみましたが、「[WebCrawler](https://docs.aws.amazon.com/kendra/latest/dg/data-source-webcrawler.html)」は利用頻度が高いと感じました。この連携ではウェブページのクロールとインデックス作成を行うことができます。一般公開されているWebサイトと、安全な通信プロトコルである Hypertext Transfer Protocol Secure (HTTPS) を使用する Web サイトのみをクロール対象となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/4588990c-93bb-e838-8d5f-0cc6aab4c9d5.png)
S3や他のデータソースと同様に登録が可能で、定期的に同期することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/4f3f10ac-eae2-624a-32d6-a5a38d2fe3af.png)
「Amazon Kendra」を利用される際には、是非その動作を試してみてください。

:::

## ３．５　FQA（よくある質問と回答）の追加

先ほどは「非構造化テキスト」である「PDF」ファイルの登録を実施しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/3104a04f-fe6f-85c5-9ee6-d079c37836b4.png)

登録できる[ドキュメントの種類](https://docs.aws.amazon.com/kendra/latest/dg/index-document-types.html)には「非構造化テキスト」である「[よくある質問と回答（FAQ）](https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html)」があります。他のデータと異なり登録方法が異なるため、こちらも登録してみます。

作業範囲は以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/a8e6d6a1-fb63-e3d9-e95a-57330d2b4201.png)

:::note info
「よくある質問と回答 (FAQ)」をインデックスに直接追加する作業でです。インデックスへの「FAQ」の追加は、非同期操作なので、先ほど実施したデータソースのように同期タイミングを設定できません。FAQ のデータは、「S3」の「バケット」に「CSVファイル」として保存して登録します。
:::


このFAQの登録をするためには、まずは様式に従った「CSVファイル」を作成する必要があります。「基本CSVファイル」を作成します。こちらのフォーマットは「質問、回答、および詳細情報を含むドキュメントを指すオプションのソースURI 」の3つのフィールドからなります。

:::note info
今回は「基本CSVファイル」を作成しますが、「カスタムCSVファイル」を作成して項目を追加・編集することも可能です。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/f290ce6f-dc48-8d30-597b-78ffe862bd13.png)
FAQ用の「基本CSV」が作成出来たら「S3」の「バケット」に格納します。これはFAQ用に個別の「バケット」を作成してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/a2ddd9fd-14fc-f7f0-bc53-128d1297acd7.png)
「FAQｓ」の「Add FAQ」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/9fe1d3e1-f937-c0b9-95b6-cd4f4e57b80d.png)
「Add FAQ」画面で、「FAQ name」を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/052671a0-03f9-4b16-3ece-1dc7708b5aee.png)
そして<font color="Red">「language」を「Japanese(ja)」</font>にします。ドキュメントをインデックス用にフィルター処理するための言語設定です。
「FAQ file format」では「基本CSVファイル」を指す「.csv file -Basic」を選択してください。
「S3」では先ほど登録した「CSVファイル」を指定します。
「IAM role」は「Create new role」で新規作成してください。
入力が完了したら「Add」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/489cbcec-f2ca-9b2e-5db2-f1d3d5a65dcf.png)
FAQsの作成が開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/0e796851-811d-9663-de89-6e2b52aa5d7b.png)
無事登録が完了すると「Status」が「Active」になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/2bdd6a50-1f38-a117-6e5c-60589db591be.png)
「Search indexed content」で動作確認を実施すると、以下の「VPCの操作方法は？」のように表示されます。通常のデータソースの検索結果の上部に表示するような形です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/23841641-2398-9ecc-f674-e302fa7ae3f8.png)
以上がFAQの登録方法でした。

## ４．検索サービスの公開
さて、検索環境が整ったところで、この検索サービスの公開方法になります。
本来はフロントエンドの環境を構築する必要があり準備には時間がかかります。しかし「Amazon Kendra」では「[Amazon Kendra Experience Builder](https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html?icmpid=docs_console_unmapped)」というサービスを提供しており、これを利用すればノーコードで外部公開することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/32ff236e-6578-83dc-b577-0b892888d0b6.png)

この環境を準備する為には「AWS IAM Identity Center (AWS Single Sign-On の後継) 」との連携が必要になります。
4章では以下の赤枠の部分が作業範囲となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/cc2c381c-c17b-359e-5393-23b640bf89aa.png)

:::note info
４章は、「Amazon Kendra Experience Builder」を活用して、「AWS IAM Identity Center」と連携を行い、検索サイトを外部公開する手順です。

なお、「AWS IAM Identity Center」は複数のAWSアカウントおよびビジネスアプリケーションへのアクセスの一元管理を実現するサービスです。今回利用する「Amazon Kendra Experience Builder」を利用する場合は、「AWS IAM Identity Center」の利用が必須です。
:::

## ４．１　AWS IAM Identity Center (AWS Single Sign-On の後継) の事前設定
「AWS IAM Identity Center」でユーザの準備を実施します。
この作業範囲は以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/87597706-4d16-4eef-4da2-15fc775011c4.png)

「AWS IAM Identity Center」画面で「IAM Identity Centerを有効化」で「有効にする」を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/ee427009-e903-1856-1e6a-fd13e0759179.png)
「ユーザー」で「ユーザの追加」を選択してユーザ情報を登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/22bbd23f-c136-4294-6402-0ce530fff3eb.png)
ユーザの作成が完了します。今回は「テスト太郎」というユーザを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/be1969eb-71f9-6766-7fec-cf8411d0a787.png)
ユーザ登録の際に登録したメールアドレスに確認のメールが届くので「Accept Invitation」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/99693fb2-d5c9-5924-d648-5c1d259e7870.png)
新規パスワードを設定して「新しいパスワードを設定」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/1f1e5da1-a6df-40da-bb03-cef9ee1626b3.png)
正常に登録が完了すると、以下のメッセージが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/9c5f4819-3335-51fd-d6e4-385be87c8b2d.png)
ログイン画面が表示されるので、「ユーザー名」を入力して「次へ」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/9925b934-ce0e-de51-f50c-09b6fddca522.png)
先ほど設定した「パスワード」を入力して「サイトイン」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/27b221cc-79b2-0fba-9044-6d722e0eac29.png)
ログインに成功します。この際に開いているのはテスト太郎の「AWSアクセスポータル」画面になります。
現在サービスが登録されていないので、何も表示されていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/f90a1e0b-30c9-2c5b-8556-89d60f84833a.png)

これで「AWS IAM Identity Center」の準備は整いました。

## ４．２　Amazon Kendra Experience Builder の設定
「AWS IAM Identity Center」でユーザの準備ができたら、[「Amazon Kendra Experience Builder」の設定](https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html)を進めます。
この作業範囲は以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/fc8807be-d02c-32fc-5006-35c13aa0a8d0.png)

まずは「Experience」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/bc2cafc7-8f89-0917-315b-8b3558042710.png)
「Experience Builder」画面で「Create experience」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/7b1f24a7-e3d5-5449-56bc-49720c0a8674.png)
「Configure experience」画面で「Experience name」に名前を入力します。
そして「Content sources」で公開する対象のデータソースを選択します。

:::note warn
「Experience name」は後程各ユーザがコンソールからログインする際に、以下のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/830f7c8f-376f-b636-34a9-109a77920a3c.png)
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/0ae2d705-56f9-7ac2-cebf-d2c2f0bf811c.png)
「IAM role」を「Create a new role」で新規に作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/34441ba4-efcb-645c-051c-c76aecf6b576.png)
「Confirm your identity from an AWS IAM Identity Center directory」画面が表示されます。
ここでは「AWS IAM Identity Center」で登録しているユーザが表示されます。
今回は先ほど登録した「テスト太郎」を選択して「Next」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/f3571496-0d33-9c13-5d8b-47d662f04a76.png)
「Review to open in Experience Builder」画面で「Create Experience and open Experience Builder」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/99672ee0-d4aa-438d-0fa0-a45d7ab03ae7.png)
「Experience Builder」の作成が開始されます。
「検索エクスペリエンスを作成しています!ちょっと待って。これには数分かかる場合があります。」と表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/1715e8f9-ec29-e7f5-48e3-fcafef2b98eb.png)
作成が完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/0bd11e5c-1e76-c3ce-47b8-40b148b435d2.png)
作成が完了すると、対象のエクスペリエンスの詳細画面が表示されるので、そこで「Experience URL」をコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/2f540057-a3a2-450a-f015-40de0ade5cd7.png)

## ４．３　実際の外部接続確認
上記の「Experience URL」を利用してログインすると、ログイン後は直接「Experience」の検索サービス画面が表示されます。「IAM Identity Center」の「AWSアクセスポータル」からログインすると、サービスを選択する画面が表示されてから「Experience」の検索サービス画面が表示されます。今回の手順は「IAM Identity Center」のアクセスポータルからのログイン手順とします。

なお、「IAM Identity Center」の「AWS アクセスポータルの URL」は以下の画面で確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/85de9941-edb0-b7d8-d95c-af4e07ea4e6d.png)

この作業範囲は以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/5208f0cc-3c09-6d4b-5772-37a1d1b0b507.png)

「AWS アクセスポータルの URL」でアクセスを実施します。ログインが画面が表示されます。
「ユーザー名」に先ほど作成した名前を入力して、「次へ」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/2ef30c71-8dc7-78df-cb3f-f682a88e82db.png)
「パスワード」に対象ユーザのパスワードを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/b3f2fece-5d48-89ad-ed14-7649e4ad6f48.png)
以下の画面が表示されると「AWS アクセスポータル」へのログインが完了となります。
画面に表示されている「Experience Builder」のサービスを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/cbdb38f0-737e-522c-b2f9-24ef7306bd40.png)

:::note info
「AWSアクセスポータル」にはMFA（多要素認証）を追加することが可能です。追加したい場合は、画面右上の「MFA devices」から登録してください。設定後は以下の画面が表示されるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/b49f8627-2e8e-6c84-d474-4fa4becbdef7.png)
:::

:::note info
「Experience」は作成した単位で表示されます。以下は2つの「Experience」を登録した場合の表示となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/62c5d37d-a117-5434-cf60-704686a54b6c.png)
:::

検索サービスの画面が表示されます。
ただ、このままでは標準の「English」検索になっており、変更が必要です。
「Switch to build mode」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/25848b0a-c5f0-c62f-f8db-38a8afe1b75c.png)
<font color="Red">「Settings」で「Langage」を「Japanese(ja)」に変更</font>します。
これを忘れると、何も検索結果にヒットしません。
「Swich to Live view」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/45c2f1b4-b80e-1254-3752-ec86a86e3ce0.png)
検索画面に戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/9058f2f6-9ca2-5aec-07e5-e257a687e71e.png)
文字列を入力して検索を実施し、問題なく検索できることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/0253b1b2-0192-f77c-9d9c-7c98546db84b.png)

これで、以下の環境が準備できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/23a5d366-38bb-0e6b-d041-dc8a71983707.png)

# ５．まとめ
今回利用した上で、以下に感想をまとめます。

## ５．１　日本語対応状況について

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/b19424e0-1b0e-3ef8-e0d8-e28ba22b5ac9.png)
今回のアップデートで「セマンティック検索の言語サポート」により「日本語」対応がされて、利便性は向上しました。ただし、「シノニム (カスタム シノニムを含む)」、「増分学習とフィードバック」、「クエリの提案」といった機能は「英語」対応しかされておらず、まだ「Amazon Kendra」における多くの機能面でのメリットを「日本語」では享受できないのが実態です。また、今回アップデートされた「HTML ドキュメントの表形式検索」も「英語」対応のみです。

また、「Amazon Kendra」のAWSコンソール画面も日本語対応していません。
こちらも合わせて日本語化対応されると嬉しいところです。

「日本語」において「Amazon Kendra」の真価を体感するには、もう少し時間が必要になりそうです。

## ５．２　システムの利便性について
多くのデータソースと連携が可能となっているのと、パラメータの設定も分かりやすく、利便性は高いと感じました。外部公開に関しては複雑な環境構築が本来は必要ですが、「Amazon Kendra Experience Builder」を利用することで、高いセキュリティを確保しながら簡易に外部への公開をすることも可能になっています。スピーディーに検索サービスを開始したい場合には、非常に価値があるサービスだと思います。

なお、途中でも触れましたが利用料は従量制ですが、金額を見る限り個人ではなく組織で利用することが前提になるかと思います。金額は「[料金表](https://aws.amazon.com/jp/kendra/pricing/)」をご確認ください。この金額に見合う利用方法を検討することが重要かと思います。

## ５．３　「Amazon Kendra」の今後の日本での利用について
もちろん現状でも十分に日本での利用が可能です。

ただ、先述の「日本語」に対する対応が進めば進むほど、導入価値が高まるかと思います。また、利用リージョンが拡大され、東京リージョンや大阪リージョンでも利用可能になることも利用促進に繋がるかと思います。少しずつ日本語化対応が進んでおり、近い将来に上記のアップデートがあるかもしれないと期待させられます。今後もアップデートに注目していきたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/6ef93b24-96c1-cb0c-cd58-e4ff6ba87854.png)


今回の記事は以上になります。
なお、この記事は2022年12月時点の内容になりますので、ご承知おきください。

この記事が皆さんが「Amazon Kendra」のサービスを知るうえで、良いきっかけになってくれたのであれば幸いです。

<img width="400" alt="message_goseichou_man.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253105/00277005-a9aa-afb8-f57c-83e2b147947e.png">