watsonx.dataにMilvusを追加して接続する

watsonx.dataにMilvusを追加して、接続テストを行っていきます。

* テスト環境
    * Milvus: 2.4.0
    * python:3.11.9
    * pymilvus:2.5.0

# 1. watsonx.dataにMilvusを追加
ナビゲーションメニューから、インフラストラクチャーマネージャーを選択し、コンポーネントの追加をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/1cafc5b4-a073-ec71-3440-1505034843ba.png)



Milvus を選択し、次へをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/cc3ed414-737f-ded3-edb2-5e7439f91634.png)

- 表示名に適当な名前を付けます
- サイズを選びます
- ストレージ・バケットの追加で接続方法を選びます。スターター・サイズでは管理バケットの中にデータも保持することができます。小・中・大のオプションではあらかじめICOSなどにデータを保管するバケットを用意する必要があります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/aa0edf70-93a8-4adf-00c6-365b62fd0330.png)


作成をクリックするとプロビジョンが始まります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/92895de6-0564-8355-a0a7-60b11348776f.png)


プロビジョンが終わりました。
クリックすると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/ba30a6d8-9943-b444-e7d1-937917c0c1f2.png)

詳細な情報が見れます。
さらに「接続の詳細を見る」をクリックすると、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/5f48ddea-6050-9ce0-15d1-25a71a8c66b2.png)



詳細な接続情報が見れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/8e11d5f2-fbd3-fa89-ae14-18f96b9311ce.png)

# 2. pymilvusで接続
pymilvusで接続してみます。

## 2.1. APIキーの作成
IBM Cloudのwatsonx.dataの操作を行うにはAPIキーが必要です。

IAMのAPIキーのメニューから「作成」でAPIキーを作ります。
https://cloud.ibm.com/iam/apikeys
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/26c6e153-8416-197c-aa7a-46832b4cf4ca.png)

任意の名前を付けて作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/3a99cc0c-07d9-e316-91b8-9843de43ca3c.png)

コピーやダウンロードして保存しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/816e7b7d-efb4-0092-0d98-a7fe100f08c5.png)


以下のコマンドなどでpymilvusを導入します。
```
py -3.11 -m pip install pymilvus
```

## 2.2. Milvusへの接続情報をセット
Milvusへの接続情報をセットします。
[マニュアル](https://cloud.ibm.com/docs/watsonxdata?topic=watsonxdata-conn-to-milvus&q=MilvusClient&tags=watsonxdata)にしたがって、APIキーを使って接続します。

wxdata_host:GRPCホスト
wxdata_port=GRPCポート
wxdata_user='ibmlhapikey' ←固定値
wxdata_apikey=2.1で用意したAPIキー　←パスワードとして使用します。

```python
wxdata_host='xxxxxxxxxxxxxxxxxxxxxxx.lakehouse.appdomain.cloud' 
wxdata_port='30656'
wxdata_user='ibmlhapikey'
wxdata_apikey='xxxxxxxxxxxxxxxxxxxxxxx'
```
取得元との関係は以下です。

![{2F9DD8AE-D598-430C-ACDA-7F6AAF328F52}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/a4799761-696a-ee6d-8053-c493203aef4b.png)

## 2.3. connectionsを使った接続
Milvusへの接続はいくつかありますが、まずは[connections](https://milvus.io/api-reference/pymilvus/v2.4.x/ORM/Connections/connect.md)を使って接続してみます。

`connect`で接続します。hostとportの指定で接続していますが、uriの指定でも接続できます。passwordにはAPIキーを使います。db_nameを指定しないとdefaultデータベースに接続されます。
`utility.get_server_type())`でサーバータイプを取得して、`disconnect`しています。

```python
from pymilvus import connections, utility

# Establish a connection
connections.connect(
    host=wxdata_host, 
    port=wxdata_port, 
    secure=True, 
    user=wxdata_user,
    password=wxdata_apikey
)

# Check the server type
print(utility.get_server_type())
connections.disconnect(alias="default")
```

`utility.get_server_type())`の結果は
```
milvus
```
が返ります。

## 2.4. MilvusClientを使った接続
次は[MilvusClient](https://milvus.io/api-reference/pymilvus/v2.4.x/MilvusClient/Client/MilvusClient.md)を使って接続してみます。

uriの指定で接続できます。`connections`で接続します。hostとportの指定では接続できません。passwordにはやはりAPIキーを使います。db_nameを指定しないとdefaultデータベースに接続されます。
`client.list_databases()`でデータベースをリストして、`close`しています。


```python
from pymilvus import MilvusClient

#milvus_client = MilvusClient(my_connection_args)
client = MilvusClient(
    uri="https://"+wxdata_host+":"+wxdata_port,
    user=wxdata_user,
    password=wxdata_apikey
)
print(client.list_databases())
client.close()
```

`client.list_databases()`の結果は
```
['default']
```
が返りました。

# サンプルコード
https://github.com/hkwd/220201watsonstudio/blob/master/241205Connect2Milvus/watsonx-langchain-milvus-ConnectionTest2pub.ipynb


# 参考
#### Milvus サービスの追加 | IBM Cloud 資料 

https://cloud.ibm.com/docs/watsonxdata?topic=watsonxdata-adding-milvus-service&locale=ja

#### watsonx.data: IBM Cloud SaaS版を無料のLite Planで作成 #ibmcloud - Qiita 

https://qiita.com/nishikyon/items/2f14c610eb258957169e#9-milvus%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E8%BF%BD%E5%8A%A0%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3

#### watsonx.data: Milvus接続情報の取得 #watsonx.data - Qiita 

https://qiita.com/nishikyon/items/e25d426cf8990991a159

#### Connecting to Milvus service | IBM Cloud 資料 
https://cloud.ibm.com/docs/watsonxdata?topic=watsonxdata-conn-to-milvus

#### connectionsを使った接続
https://milvus.io/api-reference/pymilvus/v2.4.x/ORM/Connections/connect.md

#### MilvusClientをつかった接続
https://milvus.io/api-reference/pymilvus/v2.4.x/MilvusClient/Client/MilvusClient.md