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

クイックスタート

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

はじめる前に

Zilliz Cloud は、Bring-Your-Own-Cloud (BYOC) ソリューションを提供しており、組織が Zilliz Cloud のインフラストラクチャではなく、自身のクラウドアカウントでアプリケーションとデータをホストできるようになります。当社 BYOC ソリューションの詳細については、BYOC 概要 を参照してください。

以下の図は、当社 BYOC ソリューションの使用を開始する手順を示しています。

ChT3woJqYhkzj1bipPxcXNZrnbc

このクイックスタートを実施する前に、以下のことを確認してください:

  • Zilliz Cloud にアカウントを登録している。

    手順については、Zilliz Cloud への登録 を参照してください。

  • Zilliz Cloud 営業担当に連絡し、あなたのアカウントを当社に提供している。

    📘Notes

    Zilliz BYOC は現在、一般提供されています。アクセスおよび実装の詳細については、Zilliz Cloud 営業担当にお問い合わせください。

  • BYOC 組織内にプロジェクトを作成し、プロジェクトのデータプレーンインフラストラクチャを展開している。

    Zilliz BYOC は、Virtual Private Cloud (VPC) 内で動作し、データプレーンコンポーネントの展開を開始する必要があります。以下のクラウドプロバイダーでホストされている VPC にデータプレーンを展開できます:

    上記にクラウドプロバイダーがない場合は、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
)

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

  • スキーマ

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

    • Auto ID

      プライマリフィールドを自動的に増分する機能を有効にするかどうか。

    • Dynamic Field

      予約済みの JSON フィールド $meta を使用して、スキーマ定義以外のフィールドとその値を保存するかどうか。

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

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

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

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

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

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

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

  • 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)

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

上記のコードのように、

  • 挿入するデータは、各辞書がエンティティと呼ばれるデータレコードを表す辞書のリストとして構成されます。

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

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

📘Notes
  • RESTful API を使用して作成されたコレクションは AutoID が有効になっているため、挿入するデータにプライマリフィールドを省略する必要があることに注意してください。

  • 挿入操作は非同期であるため、データ挿入後にすぐに検索を行うと空の結果セットになる可能性があります。これを避けるために、数秒待つことをお勧めします。

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)

# Output
#
# [
# [
# {
# "id": 5,
# "distance": 0.08821295201778412,
# "entity": {}
# },
# {
# "id": 6,
# "distance": 0.07432225346565247,
# "entity": {}
# },
# {
# "id": 7,
# "distance": 0.07279646396636963,
# "ent... [truncated]

出力は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)

# Output
#
# [
# [
# {
# "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)

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

    # 14. フィルター式を使用してエンティティを削除
    res = client.delete(
    collection_name="custom_setup",
    filter="id in [5,6,7,8,9]"
    )

    print(res)

    # Output
    #
    # {
    # "delete_count": 5
    # }
    📘Notes

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

コレクションの削除

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

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

client.drop_collection(
collection_name="customized_setup"
)

まとめ

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

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

  • フィルター式は検索リクエストおよびクエリリクエストの両方で使用できますが、クエリリクエストでは必須です。

次のステップ

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