위 코드에서 생성된 컬렉션에는 id (기본 키)와 vector (벡터 필드)의 두 필드만 포함되며 auto_id 및 enable_dynamic_field 설정이 기본적으로 활성화되어 있습니다.
auto_id
이 설정을 활성화하면 기본 키가 자동으로 증가합니다. 데이터 삽입 중에 기본 키를 수동으로 제공할 필요가 없습니다.
enable_dynamic_field
이 설정을 활성화하면 삽입할 데이터에서 id 및 vector 을 제외한 모든 필드가 동적 필드로 처리됩니다. 이러한 추가 필드는 $meta 이라는 특수 필드 내에 키-값 쌍으로 저장됩니다. 이 기능을 사용하면 데이터 삽입 중에 추가 필드를 포함할 수 있습니다.
제공된 코드에서 자동으로 색인되고 로드된 컬렉션은 즉시 데이터를 삽입할 수 있도록 준비됩니다.
맞춤형 설정
Milvus가 컬렉션의 거의 모든 것을 결정하는 대신, 사용자가 직접 컬렉션의 스키마와인덱스 매개변수를 결정할 수 있습니다.
1단계: 스키마 설정
스키마는 컬렉션의 구조를 정의합니다. 스키마 내에서 enable_dynamic_field 를 활성화 또는 비활성화하고, 미리 정의된 필드를 추가하고, 각 필드에 대한 속성을 설정하는 옵션이 있습니다. 스키마의 개념과 사용 가능한 데이터 유형에 대한 자세한 설명은 스키마 설명을 참조하세요.
기본 필드가 자동으로 증가하는지 여부를 결정합니다. 이 값을 True로 설정하면 기본 필드가 자동으로 증가합니다. 이 경우 오류를 방지하기 위해 기본 필드가 삽입할 데이터에 포함되지 않아야 합니다. 자동 생성된 ID는 길이가 고정되어 있으며 변경할 수 없습니다.
enable_dynamic_field
대상 컬렉션에 삽입되는 데이터에 컬렉션의 스키마에 정의되지 않은 필드가 포함된 경우 Milvus가 정의되지 않은 필드의 값을 동적 필드에 저장할지 여부를 결정합니다. 이 값을 True로 설정하면 Milvus는 $meta라는 필드를 만들어 삽입되는 데이터에서 정의되지 않은 필드와 해당 값을 저장합니다.
현재 필드가 컬렉션의 기본 필드인지 여부. 각 컬렉션에는 기본 필드가 하나만 있습니다. 기본 필드는 DataType.INT64 유형 또는 DataType.VARCHAR 유형이어야 합니다.
dim
벡터 임베딩의 차원. DataType.FLOAT_VECTOR, DataType.BINARY_VECTOR, DataType.FLOAT16_VECTOR 또는 DataType.BFLOAT16_VECTOR 유형의 필드에 필수입니다. DataType.SPARSE_FLOAT_VECTOR를 사용하는 경우 이 매개변수는 생략하세요.
현재 필드가 컬렉션의 기본 필드인지 여부입니다. 각 컬렉션에는 기본 필드가 하나만 있습니다. 기본 필드는 DataType.Int64 유형 또는 DataType.VarChar 유형이어야 합니다.
autoID
기본 필드가 자동으로 증가하도록 허용 여부 이 값을 true로 설정하면 기본 필드가 자동으로 증가합니다. 이 경우 오류를 방지하기 위해 기본 필드를 삽입할 데이터에 포함하지 않아야 합니다.
dimension
벡터 임베딩의 차원. DataType.FloatVector, DataType.BinaryVector, DataType.Float16Vector 또는 DataType.BFloat16Vector 유형의 필드에 대해 필수입니다.
파라미터
설명
name
필드의 이름입니다.
data_type
필드의 데이터 유형입니다. 사용 가능한 모든 데이터 유형에 대한 열거는 DataType을 참조하십시오.
is_primary_key
현재 필드가 컬렉션의 기본 필드인지 여부입니다. 각 컬렉션에는 기본 필드가 하나만 있습니다. 기본 필드는 DataType.INT64 유형 또는 DataType.VARCHAR 유형이어야 합니다.
auto_id
이 컬렉션에 데이터가 삽입될 때 기본 필드가 자동으로 증가하는지 여부입니다. 기본값은 False입니다. 이를 True로 설정하면 기본 필드가 자동으로 증가합니다. 사용자 지정 스키마로 컬렉션을 설정해야 하는 경우 이 매개 변수를 건너뛰세요.
dim
벡터 임베딩을 보유하는 컬렉션 필드의 차원. 이 값은 1보다 큰 정수여야 하며 일반적으로 벡터 임베딩을 생성하는 데 사용하는 모델에 따라 결정됩니다.
파라미터
설명
WithName()
필드의 이름입니다.
WithDataType()
필드의 데이터 유형입니다.
WithIsPrimaryKey()
현재 필드가 컬렉션의 기본 필드인지 여부입니다. 각 컬렉션에는 기본 필드가 하나만 있습니다. 기본 필드는 entity.FieldTypeInt64 유형 또는 entity.FieldTypeVarChar 유형이어야 합니다.
WithIsAutoID()
이 컬렉션에 데이터가 삽입될 때 기본 필드가 자동으로 증가하는지 여부. 기본값은 false입니다. 이 값을 true로 설정하면 기본 필드가 자동으로 증가합니다. 사용자 정의 스키마로 컬렉션을 설정해야 하는 경우 이 매개변수를 건너뛰세요.
WithDim()
벡터 임베딩을 보유하는 컬렉션 필드의 차원. 이 값은 1보다 큰 정수여야 하며 일반적으로 벡터 임베딩을 생성하는 데 사용하는 모델에 따라 결정됩니다.
파라미터
설명
fieldName
대상 컬렉션에 생성할 필드의 이름입니다.
dataType
필드 값의 데이터 유형입니다.
isPrimary
현재 필드가 기본 필드인지 여부입니다. True 로 설정하면 현재 필드가 기본 필드가 됩니다.
elementTypeParams
추가 필드 매개 변수.
dim
플로트벡터 또는 이진벡터 필드에 대한 선택적 매개변수로 벡터 차원을 결정합니다.
2단계: 인덱스 매개변수 설정
인덱스 매개변수는 Milvus가 컬렉션 내에서 데이터를 구성하는 방법을 결정합니다. metric_type 및 index_type 을 조정하여 특정 필드에 대한 인덱싱 프로세스를 맞춤 설정할 수 있습니다. 벡터 필드의 경우, 작업 중인 벡터 유형에 따라 COSINE, L2, IP, HAMMING 또는 JACCARD 를 metric_type 로 유연하게 선택할 수 있습니다. 자세한 내용은 유사성 메트릭을 참조하세요.
특정 필드에서 데이터를 정렬하는 데 사용되는 알고리즘의 이름입니다. 적용 가능한 알고리즘은 인메모리 인덱스 및 온디스크 인덱스를 참조하십시오.
metric_type
벡터 간의 유사성을 측정하는 데 사용되는 알고리즘입니다. 사용 가능한 값은 IP, L2, COSINE, JACCARD, HAMMING입니다. 지정된 필드가 벡터 필드인 경우에만 사용할 수 있습니다. 자세한 내용은 Milvus에서 지원되는 인덱스를 참조하세요.
params
지정된 인덱스 유형에 대한 미세 조정 매개변수입니다. 사용 가능한 키 및 값 범위에 대한 자세한 내용은 인메모리 인덱스를 참조하세요.
파라미터
설명
index_type
특정 필드에서 데이터를 정렬하는 데 사용되는 알고리즘의 이름입니다. 적용 가능한 알고리즘에 대해서는 인메모리 인덱스 및 온디스크 인덱스를 참조하세요.
metric_type
벡터 간의 유사성을 측정하는 데 사용되는 알고리즘입니다. 사용 가능한 값은 IP, L2, COSINE, JACCARD, HAMMING입니다. 지정된 필드가 벡터 필드인 경우에만 사용할 수 있습니다. 자세한 내용은 Milvus에서 지원되는 인덱스를 참조하세요.
nlist
클러스터 단위 수입니다. 클러스터 단위는 Milvus의 IVF(반전 파일) 기반 인덱스에 사용됩니다. IVF_FLAT의 경우, 인덱스는 벡터 데이터를 `nlist` 클러스터 단위로 나눈 다음, 대상 입력 벡터와 각 클러스터의 중심 사이의 거리를 비교합니다1. 1에서 65536 사이여야 합니다.
파라미터
설명
fieldName
인덱스를 생성할 대상 필드의 이름입니다.
indexName
생성할 인덱스의 이름입니다. 기본값은 대상 필드 이름입니다.
metricType
벡터 간의 유사성을 측정하는 데 사용되는 알고리즘입니다. 사용 가능한 값은 IP, L2, COSINE, JACCARD, HAMMING입니다. 지정된 필드가 벡터 필드인 경우에만 사용할 수 있습니다. 자세한 내용은 Milvus에서 지원되는 인덱스를 참조하세요.
위의 코드 조각은 각각 벡터 필드와 스칼라 필드에 대한 인덱스 파라미터를 설정하는 방법을 보여줍니다. 벡터 필드의 경우 메트릭 유형과 인덱스 유형을 모두 설정합니다. 스칼라 필드의 경우 인덱스 유형만 설정합니다. 필터링에 자주 사용되는 벡터 필드와 스칼라 필드에 대한 인덱스를 만드는 것이 좋습니다.
3단계: 컬렉션 만들기
컬렉션과 인덱스 파일을 따로 만들거나, 만들 때 인덱스가 동시에 로드된 컬렉션을 만들 수 있습니다.
# 3.5. Create a collection with the index loaded simultaneously
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)
# Output## {# "state": "<LoadState: Loaded>"# }
import io.milvus.v2.service.collection.request.CreateCollectionReq;
import io.milvus.v2.service.collection.request.GetLoadStateReq;
// 3.4 Create a collection with schema and index parametersCreateCollectionReqcustomizedSetupReq1= CreateCollectionReq.builder()
.collectionName("customized_setup_1")
.collectionSchema(schema)
.indexParams(indexParams)
.build();
client.createCollection(customizedSetupReq1);
// Thread.sleep(5000);// 3.5 Get load state of the collectionGetLoadStateReqcustomSetupLoadStateReq1= GetLoadStateReq.builder()
.collectionName("customized_setup_1")
.build();
res = client.getLoadState(customSetupLoadStateReq1);
System.out.println(res);
// Output:// true
// 3.3 Create a collection with fields and index parameters
res = await client.createCollection({
collection_name: "customized_setup_1",
fields: fields,
index_params: index_params,
})
console.log(res.error_code)
// Output// // Success//
res = await client.getLoadState({
collection_name: "customized_setup_1"
})
console.log(res.state)
// Output// // LoadStateLoaded//
# 3.6. Create a collection and index it separately
client.create_collection(
collection_name="customized_setup_2",
schema=schema,
)
res = client.get_load_state(
collection_name="customized_setup_2"
)
print(res)
# Output## {# "state": "<LoadState: NotLoad>"# }
// 3.6 Create a collection and index it separatelyCreateCollectionReqcustomizedSetupReq2= CreateCollectionReq.builder()
.collectionName("customized_setup_2")
.collectionSchema(schema)
.build();
client.createCollection(customizedSetupReq2);
// 3.4 Create a collection and index it seperately
res = await client.createCollection({
collection_name: "customized_setup_2",
fields: fields,
})
console.log(res.error_code)
// Output// // Success//
res = await client.getLoadState({
collection_name: "customized_setup_2"
})
console.log(res.state)
// Output// // LoadStateNotLoad//
// 3.4 Create a collection and index it seperately
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)
// Output// 1// LoadStateNotExist -> LoadState = 0// LoadStateNotLoad -> LoadState = 1// LoadStateLoading -> LoadState = 2// LoadStateLoaded -> LoadState = 3
위에서 만든 컬렉션은 자동으로 로드되지 않습니다. 컬렉션에 대한 인덱스는 다음과 같이 만들 수 있습니다. 컬렉션에 대한 인덱스를 별도로 생성해도 컬렉션이 자동으로 로드되지 않습니다. 자세한 내용은 컬렉션 로드 및 해제하기를 참조하세요.
파라미터
설명
collection_name
컬렉션의 이름입니다.
schema
이 컬렉션의 스키마입니다. 이를 없음으로 설정하면 이 컬렉션이 기본 설정으로 생성됩니다. 사용자 정의 스키마로 컬렉션을 설정하려면 CollectionSchema 객체를 만들어 여기에서 참조해야 합니다. 이 경우 Milvus는 요청에 포함된 다른 모든 스키마 관련 설정을 무시합니다.
index_params
이 컬렉션의 벡터 필드에 인덱스를 구축하기 위한 매개변수입니다. 사용자 정의 스키마로 컬렉션을 설정하고 컬렉션을 메모리에 자동으로 로드하려면 IndexParams 개체를 만들고 여기에서 참조해야 합니다. 이 컬렉션의 벡터 필드에 대한 인덱스는 최소한 추가해야 합니다. 나중에 인덱스 매개변수를 설정하려는 경우 이 매개변수를 건너뛸 수도 있습니다.
파라미터
설명
collectionName
컬렉션의 이름입니다.
collectionSchema
이 컬렉션의 스키마입니다. 비워 두면 이 컬렉션이 기본 설정으로 만들어집니다. 사용자 정의 스키마로 컬렉션을 설정하려면 CollectionSchema 개체를 만들어 여기에서 참조해야 합니다.
indexParams
이 컬렉션의 벡터 필드에 인덱스를 구축하기 위한 매개 변수입니다. 사용자 정의 스키마로 컬렉션을 설정하고 컬렉션을 메모리에 자동으로 로드하려면 IndexParams 객체 목록이 포함된 IndexParams 객체를 만들고 여기에서 참조하세요.
매개변수
설명
collection_name
컬렉션의 이름입니다.
fields
컬렉션의 필드입니다.
index_params
만들 컬렉션의 인덱스 매개변수입니다.
매개변수
설명
schema.CollectionName
컬렉션의 이름입니다.
schema
이 컬렉션의 스키마입니다.
index_params
생성할 컬렉션의 인덱스 매개변수입니다.
파라미터
설명
collectionName
컬렉션의 이름입니다.
schema
스키마는 대상 컬렉션의 데이터 구성을 담당합니다. 유효한 스키마에는 기본 키, 벡터 필드 및 여러 스칼라 필드를 포함하는 여러 필드가 있어야 합니다.
schema.autoID
기본 필드가 자동으로 증가하도록 허용할지 여부를 설정합니다. 이 옵션을 True로 설정하면 기본 필드가 자동으로 증가합니다. 이 경우 오류를 방지하기 위해 기본 필드를 삽입할 데이터에 포함하지 않아야 합니다. 필드에서 이 매개변수를 is_primary를 True로 설정합니다.
schema.enableDynamicField
예약된 $meta 필드를 사용하여 스키마에 정의되지 않은 필드를 키-값 쌍으로 보유할 수 있도록 허용할지 여부입니다.
fields
필드 객체 목록입니다.
fields.fieldName
대상 컬렉션에 생성할 필드의 이름입니다.
fields.dataType
필드 값의 데이터 유형입니다.
fields.isPrimary
현재 필드가 기본 필드인지 여부입니다. 이 값을 True로 설정하면 현재 필드가 기본 필드가 됩니다.
fields.elementTypeParams
추가 필드 매개 변수.
fields.elementTypeParams.dim
벡터 차원을 결정하는 플로트벡터 또는 바이너리벡터 필드에 대한 선택적 매개 변수입니다.
위에서 만든 컬렉션은 자동으로 로드되지 않습니다. 다음과 같이 컬렉션에 대한 인덱스를 만들 수 있습니다. 컬렉션에 대한 인덱스를 별도로 생성해도 컬렉션이 자동으로 로드되지 않습니다. 자세한 내용은 컬렉션 로드 및 해제하기를 참조하세요.
CreateIndexReqcreateIndexReq= CreateIndexReq.builder()
.collectionName("customized_setup_2")
.indexParams(indexParams)
.build();
client.createIndex(createIndexReq);
// Thread.sleep(1000);// 3.7 Get load state of the collectionGetLoadStateReqcustomSetupLoadStateReq2= GetLoadStateReq.builder()
.collectionName("customized_setup_2")
.build();
res = client.getLoadState(customSetupLoadStateReq2);
System.out.println(res);
// Output:// false
# 6. List all collection names
res = client.list_collections()
print(res)
# Output## [# "customized_setup_2",# "quick_setup",# "customized_setup_1"# ]
import io.milvus.v2.service.collection.response.ListCollectionsResp;
// 5. List all collection namesListCollectionsResplistCollectionsRes= client.listCollections();
System.out.println(listCollectionsRes.getCollectionNames());
// Output:// [// "customized_setup_2",// "quick_setup",// "customized_setup_1"// ]
// 5. List all collection namesListCollectionsResplistCollectionsRes= client.listCollections();
System.out.println(listCollectionsRes.getCollectionNames());
// Output:// [// "customized_setup_1",// "quick_setup",// "customized_setup_2"// ]
// 5. List all collection names
collections, err := client.ListCollections(ctx)
if err != nil {
log.Fatal("failed to list collection:", err.Error())
}
for _, c := range collections {
log.Println(c.Name)
}
// Output:// customized_setup_2// quick_setup
# 7. Load the collection
client.load_collection(
collection_name="customized_setup_2",
replica_number=1# Number of replicas to create on query nodes. Max value is 1 for Milvus Standalone, and no greater than `queryNode.replicas` for Milvus Cluster.
)
res = client.get_load_state(
collection_name="customized_setup_2"
)
print(res)
# Output## {# "state": "<LoadState: Loaded>"# }
import io.milvus.v2.service.collection.request.LoadCollectionReq;
// 6. Load the collectionLoadCollectionReqloadCollectionReq= LoadCollectionReq.builder()
.collectionName("customized_setup_2")
.build();
client.loadCollection(loadCollectionReq);
// Thread.sleep(5000);// 7. Get load state of the collectionGetLoadStateReqloadStateReq= GetLoadStateReq.builder()
.collectionName("customized_setup_2")
.build();
res = client.getLoadState(loadStateReq);
System.out.println(res);
// Output:// true
// 7. Load the collection
res = await client.loadCollection({
collection_name: "customized_setup_2"
})
console.log(res.error_code)
// Output// // Success// awaitsleep(3000)
res = await client.getLoadState({
collection_name: "customized_setup_2"
})
console.log(res.state)
// Output// // LoadStateLoaded//
// 6. Load the collection
err = client.LoadCollection(ctx, "customized_setup_2", false)
if err != nil {
log.Fatal("failed to laod collection:", err.Error())
}
// 7. Get load state of the collection
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)
// Output:// 3// LoadStateNotExist -> LoadState = 0// LoadStateNotLoad -> LoadState = 1// LoadStateLoading -> LoadState = 2// LoadStateLoaded -> LoadState = 3
컬렉션에 있는 데이터의 TTL(Time-To-Live)을 설정하여 데이터가 자동으로 삭제되기 전에 유지되어야 하는 기간을 지정합니다.
from pymilvus import Collection, connections
# Connect to Milvus server
connections.connect(host="localhost", port="19530") # Change to your Milvus server IP and port# Get existing collection
collection = Collection("quick_setup")
# Set the TTL for the data in the collection
collection.set_properties(
properties={
"collection.ttl.seconds": 60
}
)
MMAP 설정
쿼리 성능을 개선하기 위해 데이터를 메모리에 매핑할지 여부를 결정하는 컬렉션의 메모리 매핑(MMAP) 속성을 구성합니다. 자세한 내용은 메모리 매핑 구성을 참조하세요.
MMAP 속성을 설정하기 전에 먼저 컬렉션을 해제하세요. 그렇지 않으면 오류가 발생합니다.
from pymilvus import Collection, connections
# Connect to Milvus server
connections.connect(host="localhost", port="19530") # Change to your Milvus server IP and port# Get existing collection
collection = Collection("quick_setup")
# Before setting memory mapping property, we need to release the collection first.
collection.release()
# Set memory mapping property to True or Flase
collection.set_properties(
properties={
"mmap.enabled": True
}
)
// 10. Drop the collection
res = await client.dropCollection({
collection_name: "customized_setup_2"
})
console.log(res.error_code)
// Output// // Success//
res = await client.dropCollection({
collection_name: "customized_setup_1"
})
console.log(res.error_code)
// Output// // Success//
res = await client.dropCollection({
collection_name: "quick_setup"
})
console.log(res.error_code)
// Output// // Success//
// 10. Drop collections
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())
}