Laden und Freigeben
Das Laden einer Sammlung ist die Voraussetzung für die Durchführung von Ähnlichkeitssuchen und Abfragen in Sammlungen. Diese Seite konzentriert sich auf die Verfahren zum Laden und Freigeben einer Sammlung.
Sammlung laden
Wenn Sie eine Sammlung laden, lädt Milvus die Indexdateien und die Rohdaten aller Felder in den Speicher, um schnell auf Suchen und Abfragen reagieren zu können. Entitäten, die nach dem Laden einer Sammlung eingefügt werden, werden automatisch indiziert und geladen.
Die folgenden Codeschnipsel zeigen, wie eine Sammlung geladen wird.
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": ""
# }
# }
Spezifische Felder laden
Milvus kann nur die Felder laden, die in Suchen und Abfragen involviert sind, was die Speichernutzung reduziert und die Suchleistung verbessert.
Das folgende Codeschnipsel geht davon aus, dass Sie eine Sammlung mit dem Namen customized_setup_2 erstellt haben und die Sammlung zwei Felder namens my_id und my_vector enthält.
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 缺失
Wenn Sie sich dafür entscheiden, bestimmte Felder zu laden, sollten Sie beachten, dass nur die in load_fields
enthaltenen Felder als Filter und Ausgabefelder in Suchen und Abfragen verwendet werden können. Sie sollten immer die Namen des Primärfeldes und mindestens ein Vektorfeld in load_fields
aufnehmen.
Sie können auch skip_load_dynamic_field
verwenden, um zu bestimmen, ob das dynamische Feld geladen werden soll. Das dynamische Feld ist ein reserviertes JSON-Feld namens $meta und speichert alle nicht schema-definierten Felder und ihre Werte in Schlüssel-Wert-Paaren. Beim Laden des dynamischen Feldes werden alle Schlüssel in den Feldern geladen und stehen für die Filterung und Ausgabe zur Verfügung. Wenn nicht alle Schlüssel des dynamischen Feldes an der Filterung und Ausgabe von Metadaten beteiligt sind, setzen Sie skip_load_dynamic_field
auf True
.
Um nach dem Laden der Sammlung weitere Felder zu laden, müssen Sie die Sammlung zuerst freigeben, um mögliche Fehler zu vermeiden, die aufgrund von Indexänderungen ausgelöst werden.
Sammlung freigeben
Suchvorgänge und Abfragen sind speicherintensive Operationen. Um Kosten zu sparen, empfiehlt es sich, Sammlungen freizugeben, die gerade nicht verwendet werden.
Der folgende Codeschnipsel zeigt, wie man eine Sammlung freigibt.
# 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": ""
# }
# }