التحميل والتحرير
تحميل مجموعة هو الشرط الأساسي لإجراء عمليات البحث عن التشابه والاستعلامات في المجموعات. تركز هذه الصفحة على إجراءات تحميل مجموعة وتحريرها.
تحميل مجموعة
عند تحميل مجموعة، يقوم برنامج Milvus بتحميل ملفات الفهرس والبيانات الأولية لجميع الحقول في الذاكرة للاستجابة السريعة لعمليات البحث والاستعلامات. تتم فهرسة الكيانات التي يتم إدراجها بعد تحميل المجموعة وتحميلها تلقائيًا.
توضح مقتطفات التعليمات البرمجية التالية كيفية تحميل مجموعة.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
# 7. Load the collection
client.load_collection(
collection_name="customized_setup_1"
)
res = client.get_load_state(
collection_name="customized_setup_1"
)
print(res)
# Output
#
# {
# "state": "<LoadState: Loaded>"
# }
import io.milvus.v2.service.collection.request.LoadCollectionReq;
import io.milvus.v2.service.collection.request.GetLoadStateReq;
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
String CLUSTER_ENDPOINT = "http://localhost:19530";
String TOKEN = "root:Milvus";
// 1. Connect to Milvus server
ConnectConfig connectConfig = ConnectConfig.builder()
.uri(CLUSTER_ENDPOINT)
.token(TOKEN)
.build();
MilvusClientV2 client = new MilvusClientV2(connectConfig);
// 6. Load the collection
LoadCollectionReq loadCollectionReq = LoadCollectionReq.builder()
.collectionName("customized_setup_1")
.build();
client.loadCollection(loadCollectionReq);
// 7. Get load state of the collection
GetLoadStateReq loadStateReq = GetLoadStateReq.builder()
.collectionName("customized_setup_1")
.build();
Boolean res = client.getLoadState(loadStateReq);
System.out.println(res);
// Output:
// true
import { MilvusClient, DataType } from "@zilliz/milvus2-sdk-node";
const address = "http://localhost:19530";
const token = "root:Milvus";
const client = new MilvusClient({address, token});
// 7. Load the collection
res = await client.loadCollection({
collection_name: "customized_setup_1"
})
console.log(res.error_code)
// Output
//
// Success
//
res = await client.getLoadState({
collection_name: "customized_setup_1"
})
console.log(res.state)
// Output
//
// LoadStateLoaded
//
import (
"context"
"fmt"
"log"
"github.com/milvus-io/milvus/client/v2"
)
defer cli.Close(ctx)
loadTask, err := cli.LoadCollection(ctx, client.NewLoadCollectionOption("customized_setup_1"))
if err != nil {
// handle error
}
// sync wait collection to be loaded
err = loadTask.Await(ctx)
if err != nil {
// handle error
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/load" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_1"
}'
# {
# "code": 0,
# "data": {}
# }
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/get_load_state" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_1"
}'
# {
# "code": 0,
# "data": {
# "loadProgress": 100,
# "loadState": "LoadStateLoaded",
# "message": ""
# }
# }
تحميل حقول محددة
يمكن ل Milvus تحميل الحقول المتضمنة في عمليات البحث والاستعلامات فقط، مما يقلل من استخدام الذاكرة ويحسن أداء البحث.
التحميل الجزئي للمجموعة هو حاليًا في مرحلة تجريبية ولا يوصى باستخدامه في الإنتاج.
يفترض مقتطف الشيفرة التالي أنك أنشأت مجموعة باسم customized_setup_2 مخصصة، وهناك حقلين باسم my_id و my_vector في المجموعة.
client.load_collection(
collection_name="customized_setup_1",
# highlight-next-line
load_fields=["my_id", "my_vector"] # Load only the specified fields
skip_load_dynamic_field=True # Skip loading the dynamic field
)
res = client.get_load_state(
collection_name="customized_setup_1"
)
print(res)
# Output
#
# {
# "state": "<LoadState: Loaded>"
# }
// 6. Load the collection
LoadCollectionReq loadCollectionReq = LoadCollectionReq.builder()
.collectionName("customized_setup_1")
.loadFields(Arrays.asList("my_id", "my_vector"))
.build();
client.loadCollection(loadCollectionReq);
// 7. Get load state of the collection
GetLoadStateReq loadStateReq = GetLoadStateReq.builder()
.collectionName("customized_setup_1")
.build();
Boolean res = client.getLoadState(loadStateReq);
System.out.println(res);
await client.load_collection({
collection_name: "customized_setup_1",
load_fields: ["my_id", "my_vector"], // Load only the specified fields
skip_load_dynamic_field: true //Skip loading the dynamic field
});
const loadState = client.getCollectionLoadState({
collection_name: "customized_setup_1",
})
console.log(loadState);
import (
"context"
"fmt"
"log"
"github.com/milvus-io/milvus/client/v2"
)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
loadTask, err := cli.LoadCollection(ctx, client.NewLoadCollectionOption("customized_setup_1").
WithLoadFields("my_id", "my_vector"))
if err != nil {
// handle error
}
// sync wait collection to be loaded
err = loadTask.Await(ctx)
if err != nil {
// handle error
}
# REST 缺失
إذا اخترت تحميل حقول محددة، تجدر الإشارة إلى أنه يمكن استخدام الحقول المضمنة في load_fields
فقط كمرشحات وحقول إخراج في عمليات البحث والاستعلامات. يجب عليك دائمًا تضمين أسماء الحقول الأساسية وحقل متجه واحد على الأقل في load_fields
.
يمكنك أيضًا استخدام skip_load_dynamic_field
لتحديد ما إذا كان سيتم تحميل الحقل الديناميكي أم لا. الحقل الديناميكي عبارة عن حقل JSON محجوز يسمى $meta ويحفظ جميع الحقول غير المعرفة من قبل النظام الأساسي وقيمها في أزواج قيمة المفتاح. عند تحميل الحقل الديناميكي، يتم تحميل جميع المفاتيح في الحقول وإتاحتها للتصفية والإخراج. إذا كانت جميع المفاتيح في الحقل الديناميكي غير متضمنة في تصفية البيانات الوصفية والإخراج، قم بتعيين skip_load_dynamic_field
إلى True
.
لتحميل المزيد من الحقول بعد تحميل المجموعة، تحتاج إلى تحرير المجموعة أولاً لتجنب الأخطاء المحتملة التي قد تحدث بسبب تغييرات الفهرس.
تحرير المجموعة
عمليات البحث والاستعلامات هي عمليات تستهلك الكثير من الذاكرة. لتوفير التكلفة، يُنصح بتحرير المجموعات غير المستخدمة حاليًا.
يوضح مقتطف الشيفرة التالي كيفية تحرير مجموعة.
# 8. Release the collection
client.release_collection(
collection_name="custom_quick_setup"
)
res = client.get_load_state(
collection_name="custom_quick_setup"
)
print(res)
# Output
#
# {
# "state": "<LoadState: NotLoad>"
# }
import io.milvus.v2.service.collection.request.ReleaseCollectionReq;
// 8. Release the collection
ReleaseCollectionReq releaseCollectionReq = ReleaseCollectionReq.builder()
.collectionName("custom_quick_setup")
.build();
client.releaseCollection(releaseCollectionReq);
GetLoadStateReq loadStateReq = GetLoadStateReq.builder()
.collectionName("custom_quick_setup")
.build();
Boolean res = client.getLoadState(loadStateReq);
System.out.println(res);
// Output:
// false
// 8. Release the collection
res = await client.releaseCollection({
collection_name: "custom_quick_setup"
})
console.log(res.error_code)
// Output
//
// Success
//
res = await client.getLoadState({
collection_name: "custom_quick_setup"
})
console.log(res.state)
// Output
//
// LoadStateNotLoad
//
import (
"context"
"github.com/milvus-io/milvus/client/v2"
)
err := cli.ReleaseCollection(ctx, client.NewReleaseCollectionOption("custom_quick_setup"))
if err != nil {
// handle error
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/release" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"collectionName": "custom_quick_setup"
}'
# {
# "code": 0,
# "data": {}
# }
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/get_load_state" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"collectionName": "custom_quick_setup"
}'
# {
# "code": 0,
# "data": {
# "loadProgress": 0,
# "loadState": "LoadStateNotLoaded",
# "message": ""
# }
# }