メインコンテンツまでスキップ
バージョン: User Guides (Cloud)

クイックスタート

このガイドでは、Zilliz Cloudクラスターを使用して、高性能セマンティック検索に関連する操作を実行する方法を示します。

以下の手順では、クラスターを作成し、APIキーまたはクラスターコンフィデンシャルを取得し、好みのSDKをインストールしていることを前提としています。

接続の設定

クラスターのコンフィデンシャルまたはAPIキーを取得したら、それを使用してクラスターに接続できます。

from pymilvus import MilvusClient, DataType

CLUSTER_ENDPOINT = "YOUR_CLUSTER_ENDPOINT"
TOKEN = "YOUR_CLUSTER_TOKEN"
# 有効なトークンは以下のいずれかです
# - APIキー、または
# - `user:pass` のようにコロンで結合されたクラスターのユーザー名とパスワード

# 1. Milvusクライアントを設定
client = MilvusClient(
uri=CLUSTER_ENDPOINT,
token=TOKEN
)

コレクションの作成

Zilliz Cloudでは、ベクトル埋め込みをコレクションに保存する必要があります。コレクションに保存されたすべてのベクトル埋め込みは、同じ次元と類似性を測定するための距離メトリックを共有します。

コレクションを作成するには、コレクションの各フィールドの属性(名前、データ型、および特定のフィールドの追加属性)を定義する必要があります。さらに、検索性能を高速化するために必要なフィールドにインデックスを作成する必要があります。ベクトルフィールドにはインデックスが必須であることに注意してください。

# 3. カスタマイズされた設定モードでコレクションを作成

# 3.1. スキーマを作成
schema = MilvusClient.create_schema(
auto_id=False,
enable_dynamic_field=True,
)

# 3.2. スキーマにフィールドを追加
schema.add_field(field_name="my_id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="my_vector", datatype=DataType.FLOAT_VECTOR, dim=5)

# 3.3. インデックスパラメータを準備
index_params = client.prepare_index_params()

# 3.4. インデックスを追加
index_params.add_index(
field_name="my_id"
)

index_params.add_index(
field_name="my_vector",
index_type="AUTOINDEX",
metric_type="IP"
)

# 3.5. コレクションを作成
client.create_collection(
collection_name="custom_setup",
schema=schema,
index_params=index_params
)

上記の設定では、コレクションの作成中にスキーマとインデックスパラメータを含むコレクションのさまざまな側面を定義しています。

  • スキーマ

    スキーマはコレクションの構造を定義します。上記のように事前定義されたフィールドを追加し、その属性を設定する以外にも、以下の有効化または無効化を選択できます。

    • 自動ID

      プライマリフィールドを自動的にインクリメントするコレクションを有効にするかどうか。

    • 動的フィールド

      予定されたフィールド定義されていないフィールドとその値を保存するために予約されたJSONフィールド $meta を使用するかどうか。

    スキーマの詳細な説明は、スキーマ説明を参照してください。

  • インデックスパラメータ

    インデックスパラメータは、Zilliz Cloudがコレクション内でデータを整理する方法を指示します。メトリックタイプインデックスタイプを設定することにより、フィールドに特定のインデックスを割り当てることができます。

    • ベクトルフィールドでは、AUTOINDEX をインデックスタイプとして使用し、COSINEL2、またはIPmetric_type として使用できます。

    • スカラー(数値)フィールド、プライマリフィールドを含む場合、Zilliz Cloudは整数に対しては TRIE を、文字列に対しては STL_SORT を使用します。

    インデックスタイプの追加の洞察は、AUTOINDEX説明を参照してください。

📘注釈
  • 前述のコードスニペットで作成されたコレクションは自動的にロードされます。自動的にロードされたコレクションを作成したくない場合は、インデックスパラメータの設定をスキップしてください。詳細は コレクション作成 を参照してください。

  • RESTful APIを使用して作成されたコレクションは常に自動的にロードされます。

データの挿入

コレクションの準備ができたら、以下のようにデータを追加できます。

# 4. コレクションにデータを挿入
# 4.1. データを準備
data=[
{"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"},
{"id": 1, "vector": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], "color": "red_7025"},
{"id": 2, "vector": [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, 0.7894058910881185, 0.20785793220625592], "color": "orange_6781"},
{"id": 3, "vector": [0.3172005263489739, 0.9719044792798428, -0.36981146090600725, -0.4860894583077995, 0.95791889146345], "color": "pink_9298"},
{"id": 4, "vector": [0.4452349528804562, -0.8757026943054742, 0.8220779437047674, 0.46406290649483184, 0.30337481143159106], "color": "red_4794"},
{"id": 5, "vector": [0.985825131989184, -0.8144651566660419, 0.6299267002202009, 0.1206906911183383, -0.1446277761879955], "color": "yellow_4222"},
{"id": 6, "vector": [0.8371977790571115, -0.015764369584852833, -0.31062937026679327, -0.562666951622192, -0.8984947637863987], "color": "red_9392"},
{"id": 7, "vector": [-0.33445148015177995, -0.2567135004164067, 0.8987539745369246, 0.9402995886420709, 0.5378064918413052], "color": "grey_8510"},
{"id": 8, "vector": [0.39524717779832685, 0.4000257286739164, -0.5890507376891594, -0.8650502298996872, -0.6140360785406336], "color": "white_9381"},
{"id": 9, "vector": [0.5718280481994695, 0.24070317428066512, -0.3737913482606834, -0.06726932177492717, -0.6980531615588608], "color": "purple_4976"}
]

# 4.2. データを挿入
res = client.insert(
collection_name="custom_setup",
data=data
)

print(res)

# 出力
#
# {
# "insert_count": 10,
# "ids": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# }

上記のコードのように、

  • 挿入するデータは辞書のリストとして整理され、各辞書はデータレコード(エンティティ)を表します。

  • 各辞書には、スキーマ定義されていない color という名前のフィールドが含まれています。

  • 各辞書には、事前定義フィールドと動的フィールドに対応するキーが含まれています。

📘注釈
  • RESTful APIで作成されたコレクションは自動IDが有効になっているので、挿入するデータからプライマリフィールドを省略する必要があります。

  • 挿入操作は非同期的であり、データ挿入直後に検索を実行すると結果が空になることがあります。これを避けるために、数秒待つことを推奨します。

1つまたは複数のベクトル埋め込みに基づいて類似度検索を実施できます。検索リクエストにフィルター条件を含めて類似度検索結果を強化することもできます。

# 8. スキーマ定義フィールドを使用してフィルター式で検索
# 1 クエリベクトルを準備
query_vectors = [
[0.041732933, 0.013779674, -0.027564144, -0.013061441, 0.009748648]
]

# 2. 検索を開始
res = client.search(
collection_name="custom_setup",
data=query_vectors,
filter="4 < id < 8",
limit=3
)

print(res)

# 出力
#
# [
# [
# {
# "id": 5,
# "distance": 0.08821295201778412,
# "entity": {}
# },
# {
# "id": 6,
# "distance": 0.07432225346565247,
# "entity": {}
# },
# {
# "id": 7,
# "distance": 0.07279646396636963,
# "entity": {}
# }
# ]
# ]

出力は3つの辞書のサブリストになるべきです。各辞書はID、距離、および指定された出力フィールドを持つ検索されたエンティティを表します。

動的フィールドをフィルター式に含めることもできます。以下のコードスニペットでは、colorはスキーマ定義されていないフィールドです。マジック $meta フィールドのキーとしてそれらを含めることができます($meta["color"]のように)、またはスキーマ定義フィールドのように直接使用することもできます(colorのように)。

# 9. カスタムフィールドを使用したフィルター式で検索
# 9.1.クエリベクトルを準備
query_vectors = [
[0.041732933, 0.013779674, -0.027564144, -0.013061441, 0.009748648]
]

# 9.2.検索開始
res = client.search(
collection_name="custom_setup",
data=query_vectors,
filter='$meta["color"] like "red%"',
limit=3,
output_fields=["color"]
)

print(res)

# 出力
#
# [
# [
# {
# "id": 5,
# "distance": 0.08821295201778412,
# "entity": {
# "color": "yellow_4222"
# }
# },
# {
# "id": 6,
# "distance": 0.07432225346565247,
# "entity": {
# "color": "red_9392"
# }
# },
# {
# "id": 7,
# "distance": 0.07279646396636963,
# "entity": {
# "color": "grey_8510"
# }
# }
# ]
# ]

エンティティの削除

Zilliz Cloudでは、IDによる削除とフィルターによる削除が可能です。

  • IDによるエンティティの削除。

    # 13. IDによるエンティティの削除
    res = client.delete(
    collection_name="custom_setup",
    ids=[0,1,2,3,4]
    )

    print(res)

    # 出力
    #
    # {
    # "delete_count": 5
    # }
  • フィルターによるエンティティの削除

    # 14. フィルター式によるエンティティの削除
    res = client.delete(
    collection_name="custom_setup",
    filter="id in [5,6,7,8,9]"
    )

    print(res)

    # 出力
    #
    # {
    # "delete_count": 5
    # }
    📘注釈

    現在、RESTful APIの削除エンドポイントはフィルターをサポートしていません。

コレクションの削除

このガイドを完了したら、以下の通りコレクションを削除できます:

# 15. コレクションを削除
client.drop_collection(
collection_name="custom_setup"
)

client.drop_collection(
collection_name="customized_setup"
)

要点

  • コレクションを作成する前に、スキーマを作成し、コレクション内のフィールドを定義する必要があります。

  • データ挿入プロセスには完了までに時間がかかることがあります。データ挿入後および類似度検索を実施する前に数秒待つことを推奨します。

  • フィルター式は検索リクエストとクエリリクエストの両方で使用できます。ただし、クエリリクエストでは必須です。

次のステップ

このクイックスタートガイドを確認した後、以下のトピックを調べることができます: