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é dansdtype
. 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()