La classe Collection dans Milvus est similaire à une table dans MySQL, utilisée pour organiser des données et composée d'une ou plusieurs partitions.

Création d'une collection

Une collection est composée d'une ou plusieurs partitions. Lors de la création d'une nouvelle collection, Milvus créera une partition par défaut nommée _default. Pour plus d'informations, veuillez vous référer à l'explication des termes - concernant les collections.

L'exemple suivant créera une collection nommée book avec deux partitions, comprenant un champ de clé primaire nommé book_id, un champ scalaire de type INT64 nommé word_count, et un champ de vecteur à deux dimensions en virgule flottante nommé book_intro. Les applications concrètes utilisent souvent des vecteurs de dimensions plus élevées que dans l'exemple.

Mode de préparation

Le mode est similaire à la définition de la structure d'une table MYSQL.

La collection à créer doit contenir un champ de clé primaire et un champ vectoriel. Le champ de clé primaire prend en charge les types de données INT64 et VarChar.

Tout d'abord, préparez les paramètres nécessaires, y compris le schéma des champs, le schéma de la collection et le nom de la collection.

Avant de définir le schéma de la collection, créez un schéma pour chaque champ de la collection. Pour réduire la complexité de l'insertion de données, Milvus vous permet de spécifier une valeur par défaut pour chaque champ scalaire (sauf le champ de clé primaire). Cela signifie que si vous laissez un champ vide lors de l'insertion de données, la valeur par défaut configurée lors de la création du schéma du champ sera utilisée.

from pymilvus import CollectionSchema, FieldSchema, DataType
book_id = FieldSchema(
  name="book_id",
  dtype=DataType.INT64,
  is_primary=True,
)
book_name = FieldSchema(
  name="book_name",
  dtype=DataType.VARCHAR,
  max_length=200,
  default_value="Inconnu"  # La valeur par défaut est "Inconnu"
)
word_count = FieldSchema(
  name="word_count",
  dtype=DataType.INT64,
  default_value=9999  # La valeur par défaut est 9999
)
book_intro = FieldSchema(
  name="book_intro",
  dtype=DataType.FLOAT_VECTOR,
  dim=2
)
schema = CollectionSchema(
  fields=[book_id, book_name, word_count, book_intro],
  description="Recherche de livres de test",  # La description est "Recherche de livres de test"
  enable_dynamic_field=True  # Activer le schéma dynamique
)
collection_name = "livre"

Type de schéma Paramètre Description Options
FieldSchema name Le nom du champ à créer. N/A
dtype Le type de données du champ à créer. Champ clé primaire: - DataType.INT64 (numpy.int64) - DataType.VARCHAR (VARCHAR) Champs scalaires: - DataType.BOOL (Booléen) - DataType.INT8 (numpy.int8) - DataType.INT16 (numpy.int16) - DataType.INT32 (numpy.int32) - DataType.INT64 (numpy.int64) - DataType.FLOAT (numpy.float32) - DataType.DOUBLE (numpy.double) - DataType.VARCHAR (VARCHAR) - DataType.JSON (JSON) Champs vectoriels: - BINARY_VECTOR (Vecteur binaire) - FLOAT_VECTOR (Vecteur flottant)
is_primary Un commutateur qui contrôle si le champ est un champ de clé primaire. Ce paramètre doit être spécifié pour les champs de clé primaire. True ou False
auto_id Un commutateur pour activer ou désactiver l'attribution automatique de l'ID (clé primaire). Ce paramètre doit être spécifié pour les champs de clé primaire et est par défaut à False. True ou False
max_length (Requis pour les champs VARCHAR) La longueur maximale de la chaîne pouvant être insérée. [1, 65 535]
default_value La valeur par défaut du champ. Ce paramètre s'applique uniquement aux champs scalaires non tableau et non JSON. Il n'est pas possible de spécifier une valeur par défaut pour le champ de clé primaire. Pour plus d'informations, veuillez vous référer au paramètre default_value. N/A
dim (Requis pour les champs vectoriels) La dimension du vecteur. [1, 32 768]
description (Facultatif) Description du champ. N/A
CollectionSchema fields Les champs à créer pour la collection. N/A
description (Facultatif) Description de la collection à créer. N/A
enable_dynamic_field Indique si le schéma dynamique doit être activé. Type de données: Booléen (true ou false). Facultatif, par défaut à False. Pour plus d'informations sur le schéma dynamique, veuillez vous référer au guide de l'utilisateur pour le schéma dynamique et la gestion des collections.
collection_name Le nom de la collection à créer. N/A

Création d'une collection avec un schéma

Ensuite, créez une collection avec le schéma spécifié.

from pymilvus import Collection
collection = Collection(
    name=collection_name,
    schema=schema,
    using='default',
    shards_num=2
    )
Paramètre Description Options
using (optionnel) Spécifiez l'alias du serveur ici et choisissez où créer la collection dans le serveur Milvus. N/A
shards_num (optionnel) Le nombre de shards pour la collection à créer. [1,16]
num_partitions (optionnel) Le nombre logique de partitions pour la collection à créer. [1,4096]
*kwargs: collection.ttl.seconds (optionnel) Le TTL de la collection est le temps d'expiration de la collection. Les données dans la collection expirée seront nettoyées et ne participeront pas aux recherches ou requêtes. Spécifiez le TTL en secondes. La valeur doit être supérieure ou égale à 0. 0 signifie désactiver le TTL.

Limitations

Configuration des ressources

Fonctionnalité Limite maximale
Longueur du nom de la collection 255 caractères
Nombre de partitions dans la collection 4 096
Nombre de champs dans la collection 64
Nombre de shards dans la collection 16

Paramètre default_value

  • default_value s'applique uniquement aux champs scalaires non-array et non-JSON.
  • default_value ne s'applique pas à la clé primaire.
  • Le type de données de default_value doit être le même que le type de données spécifié dans dtype. Sinon, des erreurs peuvent se produire.
  • Dans le cas de l'utilisation de auto_id, il n'est pas autorisé de définir tous les champs restants pour utiliser la valeur par défaut. En d'autres termes, lors de l'exécution d'opérations d'insertion ou de mise à jour, vous devez spécifier la valeur d'au moins un champ. Sinon, des erreurs peuvent se produire.

Renommer une collection

Si vous souhaitez renommer une collection, vous pouvez interagir avec Milvus en utilisant l'API de renommage de collection. Ce guide vous aidera à comprendre comment utiliser votre SDK choisi pour renommer une collection existante.

Dans l'extrait de code suivant, nous créons une collection que nous nommons old_collection, puis la renommons en new_collection.

from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility
connections.connect(alias="default")
schema = CollectionSchema(fields=[
...     FieldSchema("int64", DataType.INT64, description="int64", is_primary=True),
...     FieldSchema("float_vector", DataType.FLOAT_VECTOR, is_primary=False, dim=128),
... ])
collection = Collection(name="old_collection", schema=schema)
utility.rename_collection("old_collection", "new_collection") # Sortie : True
utility.has_collection("new_collection") # Sortie : False

Modification d'une collection

Actuellement, la fonctionnalité TTL n'est disponible que en Python.

collection.set_properties(properties={"collection.ttl.seconds": 1800})

L'exemple ci-dessus change le TTL de la collection à 1800 secondes.

Vérifier si une collection existe

Vérifiez si la collection existe dans Milvus.

from pymilvus import utility
utility.has_collection("book")

Vérifier les détails de la collection

from pymilvus import Collection
collection = Collection("book")  # Obtenez une collection existante.

collection.schema                # Retourne CollectionSchema de la collection.
collection.description           # Retourne la description de la collection.
collection.name                  # Retourne le nom de la collection.
collection.is_empty              # Renvoie un booléen indiquant si la collection est vide.
collection.num_entities          # Retourne le nombre d'entités dans la collection.
collection.primary_field         # Retourne schema.FieldSchema de la clé primaire.
collection.partitions            # Renvoie une liste d'objets [Partition].
collection.indexes               # Renvoie une liste d'objets [Index].
collection.properties            # Renvoie le temps d'expiration des données dans la collection.

Liste de toutes les collections

from pymilvus import utility
utility.list_collections()

Supprimer une collection

from pymilvus import utility
utility.drop_collection("book")

Créer un alias de collection

from pymilvus import utility
utility.create_alias(
  collection_name = "book",
  alias = "publication"
)

Supprimer un alias de collection

from pymilvus import utility
utility.drop_alias(alias = "publication")

Modifier un alias de collection

Modifiez un alias existant pour qu'il pointe vers une collection différente. L'exemple suivant est basé sur le scénario où l'alias publication a été initialement créé pour une autre collection.

from pymilvus import utility
utility.alter_alias(
  collection_name = "livre",
  alias = "publication"
)

Charger une collection

Comment charger une collection en mémoire avant d'effectuer des opérations de recherche ou de requête. Dans Milvus, toutes les opérations de recherche et de requête sont exécutées en mémoire.

Milvus permet aux utilisateurs de charger des collections en tant que répliques multiples pour utiliser des ressources supplémentaires en CPU et en mémoire des nœuds de requête. Cette fonctionnalité améliore le QPS et le débit globaux sans matériel supplémentaire. Avant de charger une collection, assurez-vous de lui avoir créé un index.

from pymilvus import Collection, utility

collection = Collection("livre")
collection.load(replica_number=2)

utility.load_state("livre")

utility.loading_progress("livre")

Libérer une collection

Comment libérer une collection après des opérations de recherche ou de requête pour réduire l'utilisation de la mémoire.

from pymilvus import Collection
collection = Collection("livre") 
collection.release()