Modifier une collection

Vous pouvez renommer une collection ou modifier ses paramètres. Cette page explique comment modifier une collection.

Renommer une collection

Vous pouvez renommer une collection comme suit.

from pymilvus import MilvusClient

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus"
)

client.rename_collection(
    old_name="my_collection",
    new_name="my_new_collection"
)
import io.milvus.v2.service.collection.request.RenameCollectionReq;
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);

RenameCollectionReq renameCollectionReq = RenameCollectionReq.builder()
        .collectionName("my_collection")
        .newCollectionName("my_new_collection")
        .build();

client.renameCollection(renameCollectionReq);
import { MilvusClient, DataType } from "@zilliz/milvus2-sdk-node";

const address = "http://localhost:19530";
const token = "root:Milvus";
const client = new MilvusClient({address, token});

const res = await client.renameCollection({
    oldName: "my_collection",
    newName: "my_new_collection"
});
import (
    "context"
    "fmt"

    "github.com/milvus-io/milvus/client/v2/milvusclient"
)

ctx, cancel := context.WithCancel(context.Background())
defer cancel()

milvusAddr := "localhost:19530"
token := "root:Milvus"

client, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
    Address: milvusAddr,
    APIKey:  token,
})
if err != nil {
    fmt.Println(err.Error())
    // handle error
}
defer client.Close(ctx)

err = client.RenameCollection(ctx, milvusclient.NewRenameCollectionOption("my_collection", "my_new_collection"))
if err != nil {
    fmt.Println(err.Error())
    // handle error
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"

curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/rename" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
    "collectionName": "my_collection",
    "newCollectionName": "my_new_collection"
}'

Définir les propriétés d'une collection

Vous pouvez modifier les propriétés d'une collection après sa création.

Propriétés prises en charge

Propriété

Description de la propriété

collection.ttl.seconds

Si les données d'une collection doivent être supprimées après une période spécifique, envisagez de définir sa durée de vie (TTL) en secondes. Une fois le TTL dépassé, Milvus supprime toutes les entités de la collection.

La suppression est asynchrone, ce qui signifie que les recherches et les requêtes sont encore possibles avant la fin de la suppression.

Pour plus de détails, voir Définir le TTL de la collection.

mmap.enabled

Le mappage de la mémoire (Mmap) permet d'accéder directement à la mémoire des fichiers volumineux sur disque, ce qui permet à Milvus de stocker des index et des données à la fois dans la mémoire et sur les disques durs. Cette approche permet d'optimiser la politique de placement des données en fonction de la fréquence d'accès et d'augmenter la capacité de stockage des collections sans affecter les performances de recherche.

Pour plus d'informations, reportez-vous à la section Utiliser mmap.

partitionkey.isolation

Lorsque l'isolation de la clé de partition est activée, Milvus regroupe les entités en fonction de la valeur de la clé de partition et crée un index distinct pour chacun de ces groupes. Lors de la réception d'une demande de recherche, Milvus localise l'index en fonction de la valeur de la clé de partition spécifiée dans la condition de filtrage et limite la portée de la recherche aux entités incluses dans l'index, ce qui évite de balayer des entités non pertinentes pendant la recherche et améliore considérablement les performances de la recherche.

Pour plus d'informations, reportez-vous à la section Utiliser l'isolation de la clé de partition.

dynamicfield.enabled

Active le champ dynamique pour les collections qui ont été créées sans l'activer. Une fois activé, vous pouvez insérer des entités avec des champs non définis dans le schéma d'origine. Pour plus de détails, voir Champ dynamique.

allow_insert_auto_id

Permet à une collection d'accepter des valeurs de clé primaire fournies par l'utilisateur lorsque l'option AutoID a été activée pour la collection.

  • Lorsque la valeur est "true": Les insertions, les insertions ultérieures et les importations en bloc utilisent la clé primaire fournie par l'utilisateur si elle est présente ; sinon, les valeurs de clé primaire sont générées automatiquement.

  • Si la valeur est "false" (faux), les valeurs de clé primaire fournies par l'utilisateur sont générées automatiquement : Les valeurs de clé primaire fournies par l'utilisateur sont rejetées ou ignorées et les valeurs de clé primaire sont toujours générées automatiquement. La valeur par défaut est "false".

timezone

Spécifie le fuseau horaire par défaut pour cette collection lors de la manipulation d'opérations sensibles au temps, en particulier les champs TIMESTAMPTZ. Les horodatages sont stockés en interne en UTC et Milvus convertit les valeurs pour l'affichage et la comparaison en fonction de ce paramètre. S'il est défini, le fuseau horaire de la collection remplace le fuseau horaire par défaut de la base de données ; le paramètre de fuseau horaire d'une requête peut temporairement remplacer les deux. La valeur doit être un identifiant de fuseau horaire IANA valide (par exemple, Asie/Shanghai, Amérique/Chicago ou UTC). Pour plus d'informations sur l'utilisation du champ TIMESTAMPTZ, reportez-vous à la rubrique Champ TIMESTAMPTZ.

Exemple 1 : définir le TTL d'une collection

L'extrait de code suivant montre comment définir le TTL d'une collection.

from pymilvus import MilvusClient

client.alter_collection_properties(
    collection_name="my_collection",
    properties={"collection.ttl.seconds": 60}
)
import io.milvus.v2.service.collection.request.AlterCollectionReq;
import java.util.HashMap;
import java.util.Map;

Map<String, String> properties = new HashMap<>();
properties.put("collection.ttl.seconds", "60");

AlterCollectionReq alterCollectionReq = AlterCollectionReq.builder()
        .collectionName("my_collection")
        .properties(properties)
        .build();

client.alterCollection(alterCollectionReq);
res = await client.alterCollection({
    collection_name: "my_collection",
    properties: {
        "collection.ttl.seconds": 60
    }
})
err = client.AlterCollectionProperties(ctx, milvusclient.NewAlterCollectionPropertiesOption("my_collection").WithProperty(common.CollectionTTLConfigKey, 60))
if err != nil {
    fmt.Println(err.Error())
    // handle error
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"

curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/alter_properties" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
    "collectionName": "test_collection",
    "properties": {
        "collection.ttl.seconds": 60
    }
}'

Exemple 2 : Activer mmap

L'extrait de code suivant montre comment activer mmap.

from pymilvus import MilvusClient

client.alter_collection_properties(
    collection_name="my_collection",
    properties={"mmap.enabled": True}
)
Map<String, String> properties = new HashMap<>();
properties.put("mmap.enabled", "True");

AlterCollectionReq alterCollectionReq = AlterCollectionReq.builder()
        .collectionName("my_collection")
        .properties(properties)
        .build();

client.alterCollection(alterCollectionReq);
await client.alterCollectionProperties({
    collection_name: "my_collection",
    properties: {
        "mmap.enabled": true
    }
});
err = client.AlterCollectionProperties(ctx, milvusclient.NewAlterCollectionPropertiesOption("my_collection").WithProperty(common.MmapEnabledKey, true))
if err != nil {
    fmt.Println(err.Error())
    // handle error
}
# restful
curl -X POST "http://localhost:19530/v2/vectordb/collections/alter_properties" \
  -H "Content-Type: application/json" \
  -d '{
    "collectionName": "my_collection",
    "properties": {
      "mmap.enabled": "true"
    }
  }'

Exemple 3 : Activer la clé de partition

L'extrait de code suivant montre comment activer la clé de partition.

from pymilvus import MilvusClient

client.alter_collection_properties(
    collection_name="my_collection",
    properties={"partitionkey.isolation": True}
)
Map<String, String> properties = new HashMap<>();
properties.put("partitionkey.isolation", "True");

AlterCollectionReq alterCollectionReq = AlterCollectionReq.builder()
        .collectionName("my_collection")
        .properties(properties)
        .build();

client.alterCollection(alterCollectionReq);
await client.alterCollectionProperties({
    collection_name: "my_collection",
    properties: {
        "partitionkey.isolation": true
    }
});
err = client.AlterCollectionProperties(ctx, milvusclient.NewAlterCollectionPropertiesOption("my_collection").WithProperty(common.PartitionKeyIsolationKey, true))
if err != nil {
    fmt.Println(err.Error())
    // handle error
}
# restful
curl -X POST "http://localhost:19530/v2/vectordb/collections/alter_properties" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{
    "collectionName": "my_collection",
    "properties": {
      "partitionkey.isolation": "true"
    }
  }'

Exemple 4 : Activer le champ dynamique

L'extrait de code suivant montre comment activer le champ dynamique.

from pymilvus import MilvusClient

client.alter_collection_properties(
    collection_name="my_collection",
    properties={"dynamicfield.enabled": True}
)
Map<String, String> properties = new HashMap<>();
properties.put("dynamicfield.enabled", "True");

AlterCollectionReq alterCollectionReq = AlterCollectionReq.builder()
        .collectionName("my_collection")
        .properties(properties)
        .build();

client.alterCollection(alterCollectionReq);
await client.alterCollectionProperties({
    collection_name: "my_collection",
    properties: {
        "dynamicfield.enabled": true
    }
});
err = client.AlterCollectionProperties(ctx, milvusclient.NewAlterCollectionPropertiesOption("my_collection").WithProperty(common.EnableDynamicSchemaKey, true))
if err != nil {
    fmt.Println(err.Error())
    // handle error
}
# restful
curl -X POST "http://localhost:19530/v2/vectordb/collections/alter_properties" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{
    "collectionName": "my_collection",
    "properties": {
      "dynamicfield.enabled": "true"
    }
  }'

Exemple 5 : activer allow_insert_auto_id

La propriété allow_insert_auto_id permet à une collection pour laquelle la fonction AutoID est activée d'accepter des valeurs de clé primaire fournies par l'utilisateur lors de l'insertion, de l'insertion ascendante et de l'importation en bloc. Lorsque la valeur est "true", Milvus utilise la valeur de clé primaire fournie par l'utilisateur si elle est présente ; sinon, elle est générée automatiquement. La valeur par défaut est "false".

L'exemple ci-dessous montre comment activer allow_insert_auto_id:

client.alter_collection_properties(
    collection_name="my_collection",
    properties={"allow_insert_auto_id": "true"}
)
# After enabling, inserts with a PK column will use that PK; otherwise Milvus auto-generates.
Map<String, String> properties = new HashMap<>();
properties.put("allow_insert_auto_id", "True");

AlterCollectionReq alterCollectionReq = AlterCollectionReq.builder()
        .collectionName("my_collection")
        .properties(properties)
        .build();

client.alterCollection(alterCollectionReq);
await client.alterCollectionProperties({
    collection_name: "my_collection",
    properties: {
        "allow_insert_auto_id": true
    }
});
err = client.AlterCollectionProperties(ctx, milvusclient.NewAlterCollectionPropertiesOption("my_collection").WithProperty(common.AllowInsertAutoIDKey, true))
if err != nil {
    fmt.Println(err.Error())
    // handle error
}
# restful
curl -X POST "http://localhost:19530/v2/vectordb/collections/alter_properties" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{
    "collectionName": "my_collection",
    "properties": {
      "allow_insert_auto_id": "true"
    }
  }'

Exemple 6 : Définir le fuseau horaire de la collecte

Vous pouvez définir un fuseau horaire par défaut pour votre collection à l'aide de la propriété timezone. Celle-ci détermine la manière dont les données temporelles sont interprétées et affichées pour toutes les opérations au sein de la collection, y compris l'insertion de données, l'interrogation et la présentation des résultats.

La valeur de timezone doit être un identifiant de fuseau horaire IANA valide, tel que Asia/Shanghai, America/Chicago ou UTC. L'utilisation d'une valeur non valide ou non standard entraînera une erreur lors de la modification de la propriété de la collection.

L'exemple ci-dessous montre comment définir le fuseau horaire de la collection sur Asia/Shanghai:

client.alter_collection_properties(
    collection_name="my_collection",
    properties={"timezone": "Asia/Shanghai"}
)
Map<String, String> properties = new HashMap<>();
properties.put("timezone", "Asia/Shanghai");

AlterCollectionReq alterCollectionReq = AlterCollectionReq.builder()
        .collectionName("my_collection")
        .properties(properties)
        .build();

client.alterCollection(alterCollectionReq);
// js
err = client.AlterCollectionProperties(ctx, milvusclient.NewAlterCollectionPropertiesOption("my_collection").WithProperty(common.CollectionDefaultTimezone, true))
if err != nil {
    fmt.Println(err.Error())
    // handle error
}
# restful
curl -X POST "http://localhost:19530/v2/vectordb/collections/alter_properties" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{
    "collectionName": "my_collection",
    "properties": {
      "timezone": "Asia/Shanghai"
    }
  }'

Abandonner des propriétés de collection

Vous pouvez également réinitialiser une propriété de collection en la supprimant comme suit.

client.drop_collection_properties(
    collection_name="my_collection",
    property_keys=[
        "collection.ttl.seconds"
    ]
)
client.dropCollectionProperties(DropCollectionPropertiesReq.builder()
        .collectionName("my_collection")
        .propertyKeys(Collections.singletonList("collection.ttl.seconds"))
        .build());
client.dropCollectionProperties({
    collection_name:"my_collection",
    properties: ['collection.ttl.seconds'],
});
err = client.DropCollectionProperties(ctx, milvusclient.NewDropCollectionPropertiesOption("my_collection", common.CollectionTTLConfigKey))
if err != nil {
    fmt.Println(err.Error())
    // handle error
}
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/drop_properties" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
    "collectionName": "my_collection",
    "propertyKeys": [
        "collection.ttl.seconds"
    ]
}'