このガイドでは、選択したSDKを使用して、コレクションの作成と管理について説明します。
Milvusでは、ベクトル埋め込みをコレクションに格納します。コレクション内のすべてのベクトル埋め込みは、同じ次元と類似度を測定するための距離メトリックを共有します。
Milvusのコレクションは動的フィールド(スキーマで定義されていないフィールド)と主キーの自動インクリメントをサポートしています。
様々な好みに対応するため、Milvusはコレクションの作成に2つの方法を提供しています。1つはクイックセットアップを提供し、もう1つはコレクションスキーマとインデックスパラメータの詳細なカスタマイズを可能にします。
さらに、必要に応じてコレクションを表示、ロード、リリース、ドロップすることができます。
以下のいずれかの方法でコレクションを作成できます:
AI業界における大きな飛躍を背景に、ほとんどの開発者はシンプルかつダイナミックなコレクションを必要としています。Milvusでは、3つの引数を指定するだけで、そのようなコレクションを素早くセットアップできます:
from pymilvus import MilvusClient, DataType
client = MilvusClient(
uri="http://localhost:19530"
)
client.create_collection(
collection_name="quick_setup" ,
dimension=5
)
res = client.get_load_state(
collection_name="quick_setup"
)
print (res)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.collection.request.GetLoadStateReq;
import io.milvus.v2.service.collection.request.CreateCollectionReq;
String CLUSTER_ENDPOINT = "http://localhost:19530" ;
ConnectConfig connectConfig = ConnectConfig.builder()
.uri(CLUSTER_ENDPOINT)
.build();
MilvusClientV2 client = new MilvusClientV2 (connectConfig);
CreateCollectionReq quickSetupReq = CreateCollectionReq.builder()
.collectionName("quick_setup" )
.dimension(5 )
.build();
client.createCollection(quickSetupReq);
GetLoadStateReq quickSetupLoadStateReq = GetLoadStateReq.builder()
.collectionName("quick_setup" )
.build();
Boolean res = client.getLoadState(quickSetupLoadStateReq);
System.out.println(res);
address = "http://localhost:19530"
client = new MilvusClient ({address});
let res = await client.createCollection ({
collection_name : "quick_setup" ,
dimension : 5 ,
});
console .log (res.error_code )
res = await client.getLoadState ({
collection_name : "quick_setup"
})
console .log (res.state )
import (
"context"
"fmt"
"log"
"time"
milvusClient "github.com/milvus-io/milvus-sdk-go/v2/client"
"github.com/milvus-io/milvus-sdk-go/v2/entity"
)
func main () {
ctx := context.Background()
ctx, cancel := context.WithTimeout(ctx, 2 *time.Second)
defer cancel()
client, err := milvusClient.NewClient(ctx, milvusClient.Config{
Address: "localhost:19530" ,
})
if err != nil {
log.Fatal("failed to connect to milvus:" , err.Error())
}
defer client.Close()
err = client.NewCollection(ctx, "quick_setup" , 5 )
if err != nil {
log.Fatal("failed to create collection:" , err.Error())
}
stateLoad, err := client.GetLoadState(context.Background(), "quick_setup" , []string {})
if err != nil {
log.Fatal("failed to get load state:" , err.Error())
}
fmt.Println(stateLoad)
}
$ export MILVUS_URI="localhost:19530"
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/create" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "quick_setup",
"dimension": 5
}'
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/get_load_state" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "quick_setup"
}'
上記のコードで生成されたコレクションには、id (主キーとして) とvector (ベクトル・フィールドとして) の2つのフィールドのみが含まれ、auto_id とenable_dynamic_field の設定はデフォルトで有効になっています。
auto_id
この設定を有効にすると、主キーが自動的にインクリメントされます。データ挿入時に主キーを手動で指定する必要はない。
enable_dynamic_field
この設定を有効にすると、挿入されるデータのid 、vector を除くすべてのフィールドがダイナミック・フィールドとして扱われる。これらの追加フィールドは、$meta という特別なフィールド内にキーと値のペアとして保存される。この機能により、データ挿入時に追加フィールドを含めることができる。
提供されたコードから自動的にインデックス付けされ、ロードされたコレクションは、すぐにデータ挿入の準備ができます。
Milvusにコレクションのほとんど全てを決定させる代わりに、あなた自身でコレクションのスキーマと インデックスパラメータを 決定することができます。
スキーマはコレクションの構造を定義します。スキーマ内では、enable_dynamic_field を有効または無効にし、定義済みフィールドを追加し、各フィールドに属性を設定するオプションがあります。スキーマの概念と使用可能なデータ型の詳細については、スキーマの 説明を参照してください。
スキーマを設定するには、entity.NewSchema() を使用してスキーマ・オブジェクトを作成し、schema.WithField() を使用してスキーマにフィールドを追加します。
スキーマを設定するには、APIエンドポイントのリファレンス・ページに表示されているスキーマ・フォーマットに従ったJSONオブジェクトを定義する必要があります。 POST /v2/vectordb/collections/create APIエンドポイントのリファレンス・ページに表示されているスキーマ・フォーマットに従ったJSONオブジェクトを定義する必要がある。
schema = MilvusClient.create_schema(
auto_id=False ,
enable_dynamic_field=True ,
)
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 )
import io.milvus.v2.common.DataType;
import io.milvus.v2.service.collection.request.CreateCollectionReq;
CreateCollectionReq.CollectionSchema schema = client.createSchema();
schema.addField(AddFieldReq.builder()
.fieldName("my_id" )
.dataType(DataType.Int64)
.isPrimaryKey(true )
.autoID(false )
.build());
schema.addField(AddFieldReq.builder()
.fieldName("my_vector" )
.dataType(DataType.FloatVector)
.dimension(5 )
.build());
const fields = [
{
name : "my_id" ,
data_type : DataType .Int64 ,
is_primary_key : true ,
auto_id : false
},
{
name : "my_vector" ,
data_type : DataType .FloatVector ,
dim : 5
},
]
schema := entity.NewSchema()
schema.WithField(
entity.NewField().
WithName("my_id" ).
WithDataType(entity.FieldTypeInt64).
WithIsPrimaryKey(false ).
WithIsAutoID(true )).
WithField(
entity.NewField().
WithName("my_vector" ).
WithDataType(entity.FieldTypeFloatVector).
WithDim(5 ))
export fields='[{ \
"fieldName": "my_id", \
"dataType": "Int64", \
"isPrimary": true \
}, \
{ \
"fieldName": "my_vector", \
"dataType": "FloatVector", \
"elementTypeParams": { \
"dim": 5 \
} \
}]'
パラメータ
説明
auto_id
これをTrueに 設定すると、プライマリ・フィールドが自動的にインクリメントされる。この場合、エラーを避けるため、プライマリ・フィールドを挿入するデータに含めるべきではありません。自動生成されたIDは固定長で、変更することはできません。
enable_dynamic_field
これをTrue に設定すると、Milvus は挿入されるデータから未定義のフィールドとその値を保存する$meta というフィールドを作成します。
field_name
フィールド名。
datatype
フィールドのデータ型。使用可能なデータ型のリストについては、DataTypeを 参照してください。
is_primary
各コレクションは、1 つのプライマリ・フィールドのみを持つ。プライマリ・フィールドは、DataType.INT64 型またはDataType.VARCHAR 型のいずれかである必要があります。
dim
DataType.FLOAT_VECTOR 、DataType.BINARY_VECTOR 、DataType.FLOAT16_VECTOR 、またはDataType.BFLOAT16_VECTOR 型のフィールドでは必須です。DataType.SPARSE_FLOAT_VECTORを 使用する場合は、このパラメータを省略します。
パラメータ
説明
fieldName
フィールド名。
dataType
フィールドのデータ型。使用可能なデータ型のリストについては、DataTypeを 参照してください。
isPrimaryKey
各コレクションは、1 つのプライマリ・フィールドのみを持つ。プライマリ・フィールドはDataType.Int64 型またはDataType.VarChar 型のいずれかでなければなりません。
autoID
これをtrueに 設定すると、プライマリフィールドが自動的にインクリメントされます。この場合、プライマリ・フィールドはエラーを避けるために挿入するデータに含めるべきではありません。
dimension
DataType.FloatVector 、DataType.BinaryVector 、DataType.Float16Vector 、DataType.BFloat16Vector 型のフィールドでは必須。
パラメータ
説明
name
フィールド名。
data_type
フィールドのデータ型。使用可能なすべてのデータ型の列挙については、DataTypeを 参照してください。
is_primary_key
各コレクションは、1 つのプライマリ・フィールドのみを持つ。プライマリ・フィールドは、DataType.INT64 型またはDataType.VARCHAR 型のいずれかでなければなりません。
auto_id
デフォルト値はFalse です。True に設定すると、プライマリ・フィールドが自動的にインクリメントされます。カスタマイズしたスキーマでコレクションをセットアップする必要がある場合は、このパラメータをスキップします。
dim
ベクトル埋め込みを保持するコレクションフィールドの次元数。 値は1以上の整数である必要があり、通常はベクトル埋め込みを生成するために使用するモデルによって決定される。
パラメータ
説明
WithName()
フィールドの名前。
WithDataType()
フィールドのデータ型。
WithIsPrimaryKey()
各コレクションは1つのプライマリフィールドのみを持つ。プライマリ・フィールドは、entity.FieldTypeInt64 型またはentity.FieldTypeVarChar 型のいずれかである必要があります。
WithIsAutoID()
デフォルト値はfalse です。これをtrue に設定すると、プライマリ・フィールドが自動的にインクリメントされます。カスタマイズしたスキーマでコレクションをセットアップする必要がある場合は、このパラメータをスキップします。
WithDim()
ベクトル埋め込みを保持するコレクションフィールドの次元数。 この値は1以上の整数である必要があり、通常はベクトル埋め込みを生成するために使用するモデルによって決定される。
パラメータ
説明
fieldName
ターゲット・コレクションに作成するフィールドの名前。
dataType
フィールド値のデータ型。
isPrimary
現在のフィールドがプライマリ・フィールドかどうか。これをTrue に設定すると、現在のフィールドがプライマリ・フィールドになります。
elementTypeParams
追加フィールド・パラメータ。
dim
FloatVector または BinaryVector フィールドのオプション・パラメータで、ベクトル次元を決定します。
インデックスパラメータは、Milvusがコレクション内でデータをどのように整理するかを決定します。metric_type とindex_type を調整することで、特定のフィールドのインデックス作成プロセスを調整できます。ベクトル・フィールドでは、扱うベクトルのタイプに応じて、metric_type 、COSINE 、L2 、IP 、HAMMING 、JACCARD を柔軟に選択できます。詳細については、類似度メトリクスを 参照してください。
インデックス・パラメータを設定するには、 APIエンドポイントのリファレンス・ページに表示されている インデックス・パラメータの書式に従ったJSONオブジェクトを定義する必要があります。 POST /v2/vectordb/collections/create APIエンドポイント・リファレンス・ページに表示されているインデックス・パラメーター・フォーマットに従ったJSONオブジェクトを定義する必要があります。
# 3.3. Prepare index parameters
index_params = client.prepare_index_params()
# 3.4. Add indexes
index_params.add_index(
field_name="my_id" ,
index_type="STL_SORT"
)
index_params.add_index(
field_name="my_vector" ,
index_type="IVF_FLAT" ,
metric_type="IP" ,
params ={ "nlist" : 128 }
)
import io.milvus.v2.common.IndexParam;
IndexParam indexParamForIdField = IndexParam.builder()
.fieldName("my_id" )
.indexType(IndexParam.IndexType.STL_SORT)
.build();
IndexParam indexParamForVectorField = IndexParam.builder()
.fieldName("my_vector" )
.indexType(IndexParam.IndexType.IVF_FLAT)
.metricType(IndexParam.MetricType.L2)
.extraParams(Map.of("nlist" , 1024 ))
.build();
List<IndexParam> indexParams = new ArrayList <>();
indexParams.add(indexParamForIdField);
indexParams.add(indexParamForVectorField);
const index_params = [{
field_name: "my_id" ,
index_type: "STL_SORT"
},{
field_name: "my_vector" ,
index_type: "IVF_FLAT" ,
metric_type: "IP" ,
params : { nlist: 1024 }
}]
idxID := entity.NewScalarIndexWithType(entity.Sorted)
idxVector, err := entity.NewIndexIvfFlat(entity.IP, 1024 )
if err != nil {
log.Fatal("failed to new index:" , err.Error())
}
export indexParams='[{ \
"fieldName": "my_id", \
"indexName": "my_id", \
"params": { \
"index_type": "SLT_SORT" \
} \
}, { \
"fieldName": "my_vector", \
"metricType": "COSINE", \
"indexName": "my_vector", \
"params": { \
"index_type": "IVF_FLAT", \
"nlist": 1024 \
} \
}]'
パラメータ
説明
field_name
このオブジェクトが適用されるターゲット・ファイルの名前。
index_type
特定のフィールドにデータを配置するために使用されるアルゴリズムの名前。適用可能なアルゴリズムについては、In-memory Index およびOn-disk Index を参照してください。
metric_type
ベクトル間の類似度を測定するために使用されるアルゴリズム。指定可能な値はIP 、L2 、COSINE 、JACCARD 、HAMMING 。これは、指定されたフィールドがベクトル・フィールドである場合にのみ使用できる。詳しくはMilvusでサポートされているインデックスを 参照してください。
params
指定されたインデックス・タイプの微調整パラメータ。指定可能なキーと値の範囲の詳細については、メモリ内インデックスを 参照してください。
パラメータ
説明
fieldName
このIndexParamオブジェクトを適用する対象フィールドの名前。
indexType
特定のフィールドにデータを配置するために使用されるアルゴリズムの名前。適用可能なアルゴリズムについては、In-memory Index およびOn-disk Index を参照してください。
metricType
インデックスに使用する距離メトリック。指定可能な値はIP 、L2 、COSINE 、JACCARD 、HAMMING 。
extraParams
インデックスの追加パラメータ。詳細はインメモリ・インデックスと オンディスク・インデックスを 参照。
パラメータ
説明
field_name
インデックスを作成する対象フィールドの名前。
index_type
特定のフィールドにデータを配置するために使用されるアルゴリズム名。適用可能なアルゴリズムについては、インメモリ・インデックスと オンディスク・インデックスを 参照のこと。
metric_type
ベクトル間の類似度を測定するために使用されるアルゴリズム。指定可能な値はIP 、L2 、COSINE 、JACCARD 、HAMMING 。これは、指定されたフィールドがベクトル・フィールドである場合にのみ使用できる。詳しくはMilvusでサポートされているインデックスを 参照してください。
params
指定されたインデックス・タイプの微調整パラメータ。指定可能なキーと値の範囲の詳細については、メモリ内インデックスを 参照してください。
パラメータ
説明
index_type
特定のフィールドにデータを配置するために使用されるアルゴリズムの名前。適用可能なアルゴ リ ズ ム については、 「イ ン メ モ リ ・ イ ンデ ッ ク ス 」 および 「オンデ ィ ス ク ・ イ ンデ ッ ク ス 」 を参照。
metric_type
ベクトル間の類似度の測定に使用されるアルゴリズム。指定可能な値はIP 、L2 、COSINE 、JACCARD 、HAMMING 。これは、指定されたフィールドがベクトル・フィールドである場合にのみ使用できる。詳細については、Milvusでサポートされているインデックスを 参照してください。
nlist
クラスター単位数.クラスタ単位はMilvusのIVF(Inverted File)ベースのインデックスで使用されます。IVF_FLATの場合、インデックスはベクトルデータをクラスタ単位`nlist`に分割し、対象となる入力ベクトルと各クラスタの中心との距離を比較します1。1以上65536以下でなければならない。
パラメータ
説明
fieldName
インデックスを作成する対象フィールドの名前。
indexName
作成するインデックスの名前。既定値はターゲット・フィールド名。
metricType
ベクトル間の類似度の測定に使用するアルゴリズム。指定可能な値はIP 、L2 、COSINE 、JACCARD 、HAMMING です。これは、指定されたフィールドがベクトル・フィールドである場合にのみ使用できます。詳しくはMilvusでサポートされているインデックスを 参照してください。
params
インデックス・タイプと関連する設定。詳細はインメモリインデックスを 参照。
params.index_type
作成するインデックスのタイプ。
params.nlist
クラスタ単位の数。これはIVF関連のインデックスタイプに適用されます。
上のコード・スニペットは、ベクトル・フィールドとスカラー・フィールドそれぞれのインデックス・パラメータの設定方法を示しています。ベクトル・フィールドには、メトリック型とインデックス型の両方を設定します。スカラー・フィールドの場合は、インデックス・タイプのみを設定します。ベクトル・フィールドと、フィルタリングに頻繁に使用されるスカラー・フィールドには、インデックスを作成することを推奨する。
コレクションとインデックス・ファイルを別々に作成するか、作成時にインデックスを同時にロードしてコ レクションを作成するかを選択できます。
作成時にインデックスが同時にロードされたコレクションを作成します。
client.create_collection(
collection_name="customized_setup_1" ,
schema=schema,
index_params=index_params
)
time.sleep(5 )
res = client.get_load_state(
collection_name="customized_setup_1"
)
print (res)
import io.milvus.v2.service.collection.request.CreateCollectionReq;
import io.milvus.v2.service.collection.request.GetLoadStateReq;
CreateCollectionReq customizedSetupReq1 = CreateCollectionReq.builder()
.collectionName("customized_setup_1" )
.collectionSchema(schema)
.indexParams(indexParams)
.build();
client.createCollection(customizedSetupReq1);
GetLoadStateReq customSetupLoadStateReq1 = GetLoadStateReq.builder()
.collectionName("customized_setup_1" )
.build();
res = client.getLoadState(customSetupLoadStateReq1);
System.out.println(res);
res = await client.createCollection ({
collection_name : "customized_setup_1" ,
fields : fields,
index_params : index_params,
})
console .log (res.error_code )
res = await client.getLoadState ({
collection_name : "customized_setup_1"
})
console .log (res.state )
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/create" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_1",
"schema": {
"autoId": false,
"enabledDynamicField": false,
"fields": [
{
"fieldName": "my_id",
"dataType": "Int64",
"isPrimary": true
},
{
"fieldName": "my_vector",
"dataType": "FloatVector",
"elementTypeParams": {
"dim": "5"
}
}
]
},
"indexParams": [
{
"fieldName": "my_vector",
"metricType": "COSINE",
"indexName": "my_vector",
"params": {
"index_type": "IVF_FLAT",
"nlist": "1024"
}
},
{
"fieldName": "my_id",
"indexName": "my_id",
"params": {
"index_type": "STL_SORT"
}
}
]
}'
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/get_load_state" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_1"
}'
上記で作成されたコレクションは自動的にロードされます。コレクションのロードとリリースの詳細は、Load & Release Collection を参照してください。
コレクションとインデックスファイルを別々に作成する。
client.create_collection(
collection_name="customized_setup_2" ,
schema=schema,
)
res = client.get_load_state(
collection_name="customized_setup_2"
)
print (res)
CreateCollectionReq customizedSetupReq2 = CreateCollectionReq.builder()
.collectionName("customized_setup_2" )
.collectionSchema(schema)
.build();
client.createCollection(customizedSetupReq2);
res = await client.createCollection ({
collection_name : "customized_setup_2" ,
fields : fields,
})
console .log (res.error_code )
res = await client.getLoadState ({
collection_name : "customized_setup_2"
})
console .log (res.state )
schema.CollectionName = "customized_setup_2"
client.CreateCollection(ctx, schema, entity.DefaultShardNumber)
stateLoad, err := client.GetLoadState(context.Background(), "customized_setup_2" , []string {})
if err != nil {
log.Fatal("failed to get load state:" , err.Error())
}
fmt.Println(stateLoad)
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/create" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_2",
"schema": {
"autoId": false,
"enabledDynamicField": false,
"fields": [
{
"fieldName": "my_id",
"dataType": "Int64",
"isPrimary": true
},
{
"fieldName": "my_vector",
"dataType": "FloatVector",
"elementTypeParams": {
"dim": "5"
}
}
]
}
}'
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/get_load_state" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_2"
}'
上記で作成したコレクションは自動的にロードされません。以下のようにコレクションのインデックスを作成できます。別の方法でコレクションのインデックスを作成しても、コレクションは自動的にロード されません。詳細は、Load & Release Collection を参照してください。
パラメータ
説明
collection_name
コレクションの名前。
schema
このコレクションのスキーマ。 これをNone に設定すると、このコレクションはデフォルト設定で作成されます。 カスタマイズしたスキーマでコレクションを設定するには、CollectionSchema オブジェクトを作成し、それをここで参照する必要があります。この場合、milvusはリクエストに含まれる他のスキーマ関連の設定をすべて無視します。
index_params
このコレクション内のベクトルフィールドのインデックスを構築するためのパラメータです。カスタマイズされたスキーマでコレクションを設定し、自動的にコレクションをメモリにロードするには、IndexParamsオブジェクトを作成し、ここで参照する必要があります。 少なくとも、このコレクション内のベクトルフィールドのインデックスを追加する必要があります。インデックスパラメータを後で設定したい場合は、このパラメータを省略することもできます。
パラメータ
説明
collectionName
コレクションの名前。
collectionSchema
これを空にすると、このコレクションはデフォルト設定で作成されます。カスタマイズしたスキーマでコレクションをセットアップするには、CollectionSchema オブジェクトを作成し、ここでそれを参照する必要があります。
indexParams
このコレクション内のベクトル・フィールドにインデックスを構築するためのパラメータ。カスタマイズされたスキーマでコレクションをセットアップし、コレクションを自動的にメモリにロードするには、IndexParam オブジェクトのリストでIndexParams オブジェクトを作成し、ここでそれを参照します。
パラメータ
説明
collection_name
コレクションの名前。
fields
コレクション内のフィールド。
index_params
作成するコレクションのインデックス・パラメータ。
パラメータ
説明
schema.CollectionName
コレクションの名前。
schema
このコレクションのスキーマ。
index_params
作成するコレクションのインデックス・パラメータ。
パラメータ
説明
collectionName
コレクションの名前。
schema
スキーマは、対象コレクション内のデータを整理する役割を果たします。有効なスキーマは複数のフィールドを持つ必要があり、プライマリ・キー、ベクトル・フィールド、および複数のスカラー・フィールドを含む必要があります。
schema.autoID
主フィールドの自動インクリメントを許可するかどうか。これをTrueに設定すると、プライマリ・フィールドは自動的にインクリメントされます。この場合、エラーを避けるために、プライマリ・フィールドを挿入するデータに含めるべきではありません。is_primaryをTrueに設定したフィールドにこのパラメータを設定します。
schema.enableDynamicField
予約された$metaフィールドを使用して、スキーマで定義されていないフィールドをkey-valueペアで保持することを許可するかどうか。
fields
フィールド・オブジェクトのリスト。
fields.fieldName
ターゲット・コレクションに作成するフィールドの名前。
fields.dataType
フィールド値のデータ型。
fields.isPrimary
現在のフィールドがプライマリ・フィールドかどうか。True に設定すると、現在のフィールドがプライマリ・フィールドになります。
fields.elementTypeParams
追加のフィールド・パラメータ。
fields.elementTypeParams.dim
FloatVector または BinaryVector フィールドのオプション・パラメータで、ベクトル次元を決定します。
上記で作成したコレクションは自動的にロードされません。以下のように、コレクションのインデックスを作成できます。別の方法でコレクションのインデックスを作成しても、コレクションは自動的にロード されません。詳細は、Load & Release Collection を参照。
client.create_index(
collection_name="customized_setup_2" ,
index_params=index_params
)
res = client.get_load_state(
collection_name="customized_setup_2"
)
print (res)
CreateIndexReq createIndexReq = CreateIndexReq.builder()
.collectionName("customized_setup_2" )
.indexParams(indexParams)
.build();
client.createIndex(createIndexReq);
GetLoadStateReq customSetupLoadStateReq2 = GetLoadStateReq.builder()
.collectionName("customized_setup_2" )
.build();
res = client.getLoadState(customSetupLoadStateReq2);
System.out.println(res);
res = await client.createIndex ({
collection_name : "customized_setup_2" ,
field_name : "my_vector" ,
index_type : "IVF_FLAT" ,
metric_type : "IP" ,
params : { nlist : 1024 }
})
res = await client.getLoadState ({
collection_name : "customized_setup_2"
})
console .log (res.state )
client.CreateIndex(ctx, "customized_setup_2" , "my_id" , idxID, false )
client.CreateIndex(ctx, "customized_setup_2" , "my_vector" , idxVector, false )
stateLoad, err = client.GetLoadState(context.Background(), "customized_setup_2" , []string {})
if err != nil {
log.Fatal("failed to get load state:" , err.Error())
}
fmt.Println(stateLoad)
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/indexes/create" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_2",
"indexParams": [
{
"metricType": "L2",
"fieldName": "my_vector",
"indexName": "my_vector",
"indexConfig": {
"index_type": "IVF_FLAT",
"nlist": "1024"
}
}
]
}'
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/get_load_state" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_2"
}'
パラメータ
説明
collection_name
コレクションの名前。
index_params
IndexParam オブジェクトのリストを含むIndexParams オブジェクト。
パラメータ
説明
collectionName
コレクションの名前。
indexParams
IndexParam オブジェクトのリスト。
パラメータ
説明
collection_name
コレクションの名前。
field_name
インデックスを作成するフィールドの名前。
index_type
特定のフィールドにデータを配置するために使用するアルゴリズム名。適用可能なアルゴリズムについては、In-memory Index およびOn-disk Index を参照してください。
metric_type
ベクトル間の類似度を測定するために使用されるアルゴリズム。指定可能な値はIP 、L2 、COSINE 、JACCARD 、HAMMING 。これは、指定されたフィールドがベクトル・フィールドである場合にのみ使用できる。詳しくはMilvusでサポートされているインデックスを 参照してください。
params
指定されたインデックス・タイプの微調整パラメータ。指定可能なキーと値の範囲の詳細については、メモリ内インデックスを 参照してください。
パラメータ
説明
collName
コレクションの名前。
fieldName
インデックスを作成するフィールドの名前。
idx
特定のフィールドにデータを配置するために使用されるアルゴリズム名。適用可能なアルゴリズムについては、In-memory Index およびOn-disk Index を参照してください。
async
この操作が非同期かどうか。
opts
指定したインデックス・タイプの微調整パラメータ。このリクエストには複数の `entity.IndexOption` を含めることができます。指定可能なキーと値の範囲の詳細については、インメモリインデックスを 参照してください。
パラメータ
説明
collectionName
コレクションの名前。
indexParams
作成するコレクションのインデックスパラメータ。
indexParams.metricType
インデックスの構築に使用される類似度メトリックのタイプ。既定値は COSINE。
indexParams.fieldName
インデックスを作成する対象フィールドの名前。
indexParams.indexName
作成するインデックスの名前。値の既定値はターゲット・フィールド名です。
indexParams.indexConfig.index_type
作成するインデックスのタイプ。
indexParams.indexConfig.nlist
クラスタ・ユニットの数。これはIVF関連のインデックス・タイプに適用されます。
res = client.describe_collection(
collection_name="customized_setup_2"
)
print (res)
import io.milvus.v2.service.collection.request.DescribeCollectionReq;
import io.milvus.v2.service.collection.response.DescribeCollectionResp;
// 4. View collections
DescribeCollectionReq describeCollectionReq = DescribeCollectionReq.builder()
.collectionName("customized_setup_2" )
.build();
DescribeCollectionResp describeCollectionRes = client.describeCollection(describeCollectionReq);
System.out.println(JSONObject.toJSON(describeCollectionRes));
// Output:
// {
// "createTime" : 449005822816026627,
// "collectionSchema" : {"fieldSchemaList" : [
// {
// "autoID" : false ,
// "dataType" : "Int64" ,
// "name" : "my_id" ,
// "description" : "" ,
// "isPrimaryKey" : true ,
// "maxLength" : 65535,
// "isPartitionKey" : false
// },
// {
// "autoID" : false ,
// "dataType" : "FloatVector" ,
// "name" : "my_vector" ,
// "description" : "" ,
// "isPrimaryKey" : false ,
// "dimension" : 5,
// "maxLength" : 65535,
// "isPartitionKey" : false
// }
// ]},
// "vectorFieldName" : ["my_vector" ],
// "autoID" : false ,
// "fieldNames" : [
// "my_id" ,
// "my_vector"
// ],
// "description" : "" ,
// "numOfPartitions" : 1,
// "primaryFieldName" : "my_id" ,
// "enableDynamicField" : true ,
// "collectionName" : "customized_setup_2"
// }
res = await client.describeCollection ({
collection_name : "customized_setup_2"
})
console .log (res)
res, err := client.DescribeCollection(ctx, "customized_setup_2" )
if err != nil {
log.Fatal("failed to describe collection:" , err.Error())
}
fmt.Printf("ConsistencyLevel: %v\nID: %v\nLoaded: %v\nName: %v\nPhysicalChannels: %v\nProperties: %v\nSchemaField1: %v\nSchemaField2: %v\nShardNum: %v\nVirtualChannels: %v\nSchemaAutoID: %v\nSchemaCollectionName: %v\nSchemaDescription: %v" ,
res.ConsistencyLevel, res.ID, res.Loaded, res.Name, res.PhysicalChannels,
res.Properties, res.Schema.Fields[0 ], res.Schema.Fields[1 ], res.ShardNum,
res.VirtualChannels, res.Schema.AutoID, res.Schema.CollectionName, res.Schema.Description)
curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/describe" \
-H "Content-Type: application/json" \
-d '{
"dbName": "default",
"collectionName": "test_collection"
}'
既存のコレクションをすべてリストアップするには、以下のようにする:
res = client.list_collections()
print (res)
import io.milvus.v2.service.collection.response.ListCollectionsResp;
ListCollectionsResp listCollectionsRes = client.listCollections();
System.out.println(listCollectionsRes.getCollectionNames());
ListCollectionsResp listCollectionsRes = client.listCollections();
System.out.println(listCollectionsRes.getCollectionNames());
collections, err := client.ListCollections(ctx)
if err != nil {
log.Fatal("failed to list collection:" , err.Error())
}
for _, c := range collections {
log.Println(c.Name)
}
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/list" \
-H "Content-Type: application/json" \
-d '{
"dbName": "default"
}'
コレクションをロードする際、Milvusはコレクションのインデックスファイルをメモリにロードします。逆に、コレクションをリリースする際、Milvusはインデックスファイルをメモリからアンロードします。コレクションで検索を行う前に、コレクションがロードされていることを確認してください。
コレクションをロードするには load_collection() メソッドを使用し、コレクション名を指定します。また、replica_number を設定して、コレクションのロード時にクエリノード上に作成するデータセグメントのメモリ内レプリカの数を決定することもできます。
Milvus Standaloneの場合:replica_number の最大許容値は 1 です。
Milvus Cluster:最大値はMilvus構成で設定されたqueryNode.replicas を超えないようにしてください。詳細については、クエリ・ノード関連設定を 参照してください。
client.load_collection(
collection_name="customized_setup_2" ,
replica_number=1
)
res = client.get_load_state(
collection_name="customized_setup_2"
)
print (res)
import io.milvus.v2.service.collection.request.LoadCollectionReq;
LoadCollectionReq loadCollectionReq = LoadCollectionReq.builder()
.collectionName("customized_setup_2" )
.build();
client.loadCollection(loadCollectionReq);
GetLoadStateReq loadStateReq = GetLoadStateReq.builder()
.collectionName("customized_setup_2" )
.build();
res = client.getLoadState(loadStateReq);
System.out.println(res);
res = await client.loadCollection ({
collection_name : "customized_setup_2"
})
console .log (res.error_code )
await sleep (3000 )
res = await client.getLoadState ({
collection_name : "customized_setup_2"
})
console .log (res.state )
err = client.LoadCollection(ctx, "customized_setup_2" , false )
if err != nil {
log.Fatal("failed to laod collection:" , err.Error())
}
stateLoad, err := client.GetLoadState(context.Background(), "customized_setup_2" , []string {})
if err != nil {
log.Fatal("failed to get load state:" , err.Error())
}
fmt.Println(stateLoad)
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/load" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_2"
}'
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/get_load_state" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_2"
}'
この機能は現在パブリックプレビュー中です。APIと機能は将来変更される可能性があります。
ロード要求を受け取ると、Milvusはすべてのベクトルフィールドインデックスとすべてのスカラーフィールドデータをメモリにロードします。検索やクエリに関与しないフィールドがある場合、それらをロードから除外してメモリ使用量を削減し、検索パフォーマンスを向上させることができます。
client.load_collection(
collection_name="customized_setup_2" ,
load_fields=["my_id" , "my_vector" ],
skip_load_dynamic_field=True
)
res = client.get_load_state(
collection_name="customized_setup_2"
)
print (res)
検索やクエリでフィルタリング条件や出力フィールドとして使用できるのは、load_fields にリストされたフィールドだけであることに注意してください。リストには常に主キーを含める必要があります。ロードから除外されたフィールド名はフィルタリングや出力に使用できません。
skip_load_dynamic_field=True 、ダイナミック・フィールドのロードをスキップすることができます。Milvusはダイナミックフィールドを1つのフィールドとして扱うため、ダイナミックフィールド内のすべてのキーが一緒に含まれたり除外されたりします。
client.release_collection(
collection_name="customized_setup_2"
)
res = client.get_load_state(
collection_name="customized_setup_2"
)
print (res)
import io.milvus.v2.service.collection.request.ReleaseCollectionReq;
ReleaseCollectionReq releaseCollectionReq = ReleaseCollectionReq.builder()
.collectionName("customized_setup_2" )
.build();
client.releaseCollection(releaseCollectionReq);
res = client.getLoadState(loadStateReq);
System.out.println(res);
res = await client.releaseCollection ({
collection_name : "customized_setup_2"
})
console .log (res.error_code )
res = await client.getLoadState ({
collection_name : "customized_setup_2"
})
console .log (res.state )
errRelease := client.ReleaseCollection(context.Background(), "customized_setup_2" )
if errRelease != nil {
log.Fatal("failed to release collection:" , errRelease.Error())
}
fmt.Println(errRelease)
stateLoad, err = client.GetLoadState(context.Background(), "customized_setup_2" , []string {})
if err != nil {
log.Fatal("failed to get load state:" , err.Error())
}
fmt.Println(stateLoad)
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/release" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_2"
}'
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/get_load_state" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_2"
}'
コレクションにエイリアスを割り当てて、特定のコンテキストでより意味のあるものにすることができます。コレクションには複数のエイリアスを割り当てることができますが、複数のコレクションでエイリアスを共有することはできません。
client.create_alias(
collection_name="customized_setup_2" ,
alias ="bob"
)
client.create_alias(
collection_name="customized_setup_2" ,
alias ="alice"
)
import io.milvus.v2.service.utility.request.CreateAliasReq;
CreateAliasReq createAliasReq = CreateAliasReq.builder()
.collectionName("customized_setup_2" )
.alias("bob" )
.build();
client.createAlias(createAliasReq);
createAliasReq = CreateAliasReq.builder()
.collectionName("customized_setup_2" )
.alias("alice" )
.build();
client.createAlias(createAliasReq);
res = await client.createAlias ({
collection_name : "customized_setup_2" ,
alias : "bob"
})
console .log (res.error_code )
res = await client.createAlias ({
collection_name : "customized_setup_2" ,
alias : "alice"
})
console .log (res.error_code )
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/aliases/create" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_2",
"aliasName": "bob"
}'
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/aliases/create" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_2",
"aliasName": "alice"
}'
パラメータ
説明
collection_name
エイリアスを作成するコレクションの名前。
alias
コレクションのエイリアス。この操作の前に、エイリアスが既に存在しないことを確認してください。存在する場合は例外が発生します。
パラメータ
説明
collectionName
エイリアスを作成するコレクションの名前。
alias
コレクションのエイリアス。この操作の前に、エイリアスが既に存在しないことを確認してください。存在する場合は例外が発生します。
パラメータ
説明
collection_name
エイリアスを作成するコレクションの名前。
alias
コレクションのエイリアス。この操作の前に、エイリアスが既に存在しないことを確認してください。存在する場合は例外が発生します。
パラメータ
説明
collectionName
エイリアスを作成するコレクションの名前。
aliasName
コレクションのエイリアス。この操作の前に、エイリアスが既に存在しないことを確認してください。存在する場合は例外が発生します。
res = client.list_aliases(
collection_name="customized_setup_2"
)
print (res)
import io.milvus.v2.service.utility.request.ListAliasesReq;
import io.milvus.v2.service.utility.response.ListAliasResp;
ListAliasesReq listAliasesReq = ListAliasesReq.builder()
.collectionName("customized_setup_2" )
.build();
ListAliasResp listAliasRes = client.listAliases(listAliasesReq);
System.out.println(listAliasRes.getAlias());
res = await client.listAliases ({
collection_name : "customized_setup_2"
})
console .log (res.aliases )
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/aliases/list" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_2"
}'
res = client.describe_alias(
alias ="bob"
)
print (res)
import io.milvus .v2 .service .utility .request .DescribeAliasReq ;
import io.milvus .v2 .service .utility .response .DescribeAliasResp ;
DescribeAliasReq describeAliasReq = DescribeAliasReq .builder ()
.alias ("bob" )
.build ();
DescribeAliasResp describeAliasRes = client.describeAlias (describeAliasReq);
System .out .println (JSON Object .toJSON (describeAliasRes));
res = await client.describeAlias ({
collection_name : "customized_setup_2" ,
alias : "bob"
})
console .log (res)
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/aliases/describe" \
-H "Content-Type: application/json" \
-d '{
"aliasName": "bob"
}'
エイリアスを他のコレクションに再割り当てするには alter_alias() メソッドを使用して、コレクション名とエイリアスを指定します。
エイリアスを他のコレクションに再割り当てするには alterAlias() メソッドを使用して、コレクション名とエイリアスを指定します。
エイリアスを他のコレクションに再割り当てするには alterAlias() メソッドを使用して、コレクション名とエイリアスを指定します。
client.alter_alias(
collection_name="customized_setup_1" ,
alias="alice"
)
res = client.list_aliases(
collection_name="customized_setup_1"
)
print (res)
res = client.list_aliases(
collection_name="customized_setup_2"
)
print (res)
import io.milvus.v2.service.utility.request.AlterAliasReq;
AlterAliasReq alterAliasReq = AlterAliasReq.builder()
.collectionName("customized_setup_1" )
.alias("alice" )
.build();
client.alterAlias(alterAliasReq);
listAliasesReq = ListAliasesReq.builder()
.collectionName("customized_setup_1" )
.build();
listAliasRes = client.listAliases(listAliasesReq);
System.out.println (listAliasRes.getAlias());
listAliasesReq = ListAliasesReq.builder()
.collectionName("customized_setup_2" )
.build();
listAliasRes = client.listAliases(listAliasesReq);
System.out.println (listAliasRes.getAlias());
res = await client.alterAlias ({
collection_name : "customized_setup_1" ,
alias : "alice"
})
console .log (res.error_code )
res = await client.listAliases ({
collection_name : "customized_setup_1"
})
console .log (res.aliases )
res = await client.listAliases ({
collection_name : "customized_setup_2"
})
console .log (res.aliases )
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/aliases/alter" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_1",
"aliasName": "alice"
}'
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/aliases/list" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_1"
}'
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/aliases/list" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_2"
}'
client.drop_alias(
alias ="bob"
)
client.drop_alias(
alias ="alice"
)
import io.milvus.v2.service.utility.request.DropAliasReq;
DropAliasReq dropAliasReq = DropAliasReq.builder()
.alias("bob" )
.build();
client.dropAlias(dropAliasReq);
dropAliasReq = DropAliasReq.builder()
.alias("alice" )
.build();
client.dropAlias(dropAliasReq);
res = await client.dropAlias ({
alias : "bob"
})
console .log (res.error_code )
res = await client.dropAlias ({
alias : "alice"
})
console .log (res.error_code )
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/aliases/drop" \
-H "Content-Type: application/json" \
-d '{
"aliasName": "bob"
}'
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/aliases/drop" \
-H "Content-Type: application/json" \
-d '{
"aliasName": "alice"
}'
ttl.seconds やmmap.enabled など、コレクションのプロパティを設定できます。詳細はset_properties() を参照してください。
コレクション内のデータのTTL(Time-To-Live)を設定します。これはデータが自動的に削除されるまでの保持期間を指定します。
from pymilvus import Collection, connections
connections.connect(host="localhost" , port="19530" )
collection = Collection("quick_setup" )
collection.set_properties(
properties={
"collection.ttl.seconds" : 60
}
)
これは、クエリのパフォーマンスを向上させるために、データをメモリにマッピングするかどうかを決定します。詳細は、メモリ・マッピングの構成 を参照してください。
MMAP プロパティを設定する前に、まずコレクションを解放します。そうしないと、エラーが発生します。
from pymilvus import Collection, connections
connections.connect(host="localhost" , port="19530" )
collection = Collection("quick_setup" )
collection.release()
collection.set_properties(
properties={
"mmap.enabled" : True
}
)
コレクションが不要になった場合、コレクションを削除できます。
client.drop_collection(
collection_name="quick_setup"
)
client.drop_collection(
collection_name="customized_setup_1"
)
client.drop_collection(
collection_name="customized_setup_2"
)
import io.milvus.v2.service.collection.request.DropCollectionReq;
DropCollectionReq dropQuickSetupParam = DropCollectionReq.builder()
.collectionName("quick_setup" )
.build();
client.dropCollection(dropQuickSetupParam);
DropCollectionReq dropCustomizedSetupParam = DropCollectionReq.builder()
.collectionName("customized_setup_1" )
.build();
client.dropCollection(dropCustomizedSetupParam);
dropCustomizedSetupParam = DropCollectionReq.builder()
.collectionName("customized_setup_2" )
.build();
client.dropCollection(dropCustomizedSetupParam);
res = await client.dropCollection ({
collection_name : "customized_setup_2"
})
console .log (res.error_code )
res = await client.dropCollection ({
collection_name : "customized_setup_1"
})
console .log (res.error_code )
res = await client.dropCollection ({
collection_name : "quick_setup"
})
console .log (res.error_code )
err = client.DropCollection (ctx, "quick_setup" )
if err != nil {
log.Fatal ("failed to drop collection:" , err.Error ())
}
err = client.DropCollection (ctx, "customized_setup_2" )
if err != nil {
log.Fatal ("failed to drop collection:" , err.Error ())
}
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/drop" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "quick_setup"
}'
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/drop" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_1"
}'
$ curl -X POST "http://${MILVUS_URI} /v2/vectordb/collections/drop" \
-H "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_2"
}'