Azure Cognitive Search（Azure AI Search）で SharePoint ドキュメントのインデックスを作成する

### 更新事項
2023/11/17
Azure Cognitive Search の名前を Azure AI Search に変更しました。

## はじめに

Teams から SharePoint 内のドキュメントを参照して ChatGPT に質問回答させる検証を行いました。これを実現するためにはまず Azure Cognitive Search（Azure AI Search）で SharePoint をデータソースとしたインデックスを作成する必要がありますので、今回はその手順を説明します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409268/e86c2925-9cc3-3532-8ccc-315d7f21e00e.png)

基本的には以下の Microsoft の公式ドキュメント通り行えばできますので、簡単な操作は説明を省略したいと思います。（2023/11/11 時点ではパブリックプレビューです）
[SharePoint ドキュメント ライブラリにあるデータのインデックスを作成する](https://learn.microsoft.com/ja-jp/azure/search/search-howto-index-sharepoint-online)

## インデックス作成方法

上記ドキュメントの手順まとめると、
① Azure Cognitive Search（Azure AI Search）のシステム割り当てマネージド ID を有効にする
今回は Azure Cognitive Search（Azure AI Search）は Free プランでも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409268/a14f44eb-3dbb-0e42-ec72-7452f74fa252.png)

② Microsoft Entra アプリケーションを作成する
Azure Cognitive Search（Azure AI Search）から SharePoint へ接続するためには Graph API を介する必要があるので、そのためのアプリを登録します。

③ 作成したアプリケーションの各種設定をする
アクセス許可設定、認証設定、シークレット設定を行います。
こちらも特記事項はないので、公式ドキュメント通り行えばよいかと思います。

④ ドキュメントを SharePoint のドキュメントライブラリに保存する
参照させたいドキュメントを作り、そこに必要なドキュメントを保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409268/6fc57286-a7a2-385a-76e3-36ecb2fbb2c1.png)


⑤ Azure Cognitive Search（Azure AI Search） でデータソースを作成する
以下の API を実行します。URI のみ記します。
```
POST https://{Azure Cognitive Search のリソース名}.search.windows.net/datasources?api-version=2023-07-01-Preview
```
⑥ Azure Cognitive Search（Azure AI Search） でインデックスを作成する
以下の API を実行します。URI のみ記します。
```
POST https://{Azure Cognitive Search のリソース名}.search.windows.net/indexes?api-version=2023-07-01-Preview
```
⑦ Azure Cognitive Search（Azure AI Search） でインデックサーを作成し、実行する
以下の API を実行します。URI のみ記します。

```
POST https://{Azure Cognitive Search のリソース名}.search.windows.net/indexers?api-version=2023-07-01-Preview
```
公式ドキュメントにも書かれているのですが、はじめにこの API を実行したあと、認証をするための別の API も叩く必要があるので、そちらも記載しておきます。

```
GET https://{Azure Cognitive Search のリソース名}.search.windows.net/indexers/sharepoint-indexer/status?api-version=2023-07-01-Preview
```

※ ここまで行えば無事インデックス作成できると思いますが、自分が行った際は挙動がおかしく、何度かデータソースから作成し直したりしました。

※ 新たにデータソースにドキュメントを追加した場合は、インデックサーを再実行することでインデックスを更新することができます。以下にその API を記します。(公式にも記載あります)

```
POST https://{Azure Cognitive Search のリソース名}.search.windows.net/indexers/sharepoint-indexer/run?api-version=2023-07-01-Preview
```
## 実際に確認してみる
Azure Cognitive Search（Azure AI Search） のインデックスメニューから確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409268/79662784-5ac8-94cb-a4cd-032f727823a5.png)

検索エクスプローラーで特に何も設定せず「検索」をすると、以下のように作成したインデックスが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409268/e00ef897-45e8-6ce1-b097-398233f8e607.png)

## おわりに
今回 SharePoint のインデックスを作成したことで、Azure Cognitive Search（Azure AI Search） から SharePoint 内のドキュメントを参照することができました。これによって、Azure Cognitive Search（Azure AI Search）のライブラリを使用し、OpenAI と組み合わせて RAG（Retrieval Augmented Generation）機能などを実装できます。

Azure Cognitive Search（Azure AI Search）と Azure OpenAI を組み合わせた実装は以下記事で行っています。こちらは Blob ストレージをデータソースとしたインデックスを使用していますが、今回の SharePoint のインデックスに置き換えることも可能です。
[Azure Cognitive Search（Azure AI Search）× Semantic Kernel でドキュメントの内容を要約する](https://qiita.com/kkubo124/items/c171c228f2fec2a4c476)