Gérer les schémas
Cette rubrique présente le schéma dans Milvus. Le schéma est utilisé pour définir les propriétés d'une collection et les champs qu'elle contient.
Schéma de champ
Un schéma de champ est la définition logique d'un champ. C'est la première chose à définir avant de définir un schéma de collection et de gérer les collections.
Milvus ne prend en charge qu'un seul champ de clé primaire dans une collection.
Propriétés du schéma de champ
Propriétés | Description du champ | Remarque |
---|---|---|
name |
Nom du champ à créer dans la collection | Type de données : Chaîne. Obligatoire |
dtype |
Type de données du champ | Obligatoire |
description |
Description du champ | Type de données : Chaîne. Facultatif |
is_primary |
Indiquer si le champ doit être défini comme champ de clé primaire ou non. | Type de données : Booléen (true ou false ).Obligatoire pour le champ de clé primaire |
auto_id (Obligatoire pour le champ de clé primaire) |
Permet d'activer ou de désactiver l'attribution automatique de l'ID (clé primaire). | True ou False |
max_length (Obligatoire pour le champ VARCHAR) |
Longueur maximale en octets des chaînes autorisées à être insérées. Notez que les caractères multioctets (par exemple, les caractères Unicode) peuvent occuper plus d'un octet chacun. Veillez donc à ce que la longueur en octets des chaînes insérées ne dépasse pas la limite spécifiée. | [1, 65,535] |
dim |
Dimension du vecteur | Type de données : Entier ∈ [1, 32768]. Obligatoire pour un champ vectoriel dense. Omettre pour un champ vectoriel peu dense. |
is_partition_key |
Indique s'il s'agit d'un champ de clés de partition. | Type de données : Booléen (true ou false ). |
Création d'un schéma de champ
Pour réduire la complexité des insertions de données, Milvus vous permet de spécifier une valeur par défaut pour chaque champ scalaire lors de la création d'un schéma de champ, à l'exception du 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 que vous avez spécifiée pour ce champ s'applique.
Créer un schéma de champ normal :
from pymilvus import DataType, FieldSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
# The following creates a field and use it as the partition key
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)
Créez un schéma de champ avec des valeurs de champ par défaut :
from pymilvus import DataType, FieldSchema
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
# configure default value `25` for field `age`
FieldSchema(name="age", dtype=DataType.INT64, default_value=25, description="age"),
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
]
Types de données pris en charge
DataType
définit le type de données qu'un champ contient. Différents champs prennent en charge différents types de données.
Le champ clé primaire prend en charge :
- INT64 : numpy.int64
- VARCHAR : VARCHAR
Le champ scalaire prend en charge
- BOOL : booléen (
true
oufalse
) - INT8 : numpy.int8
- INT16 : numpy.int16
- INT32 : numpy.int32
- INT64 : numpy.int64
- FLOAT : numpy.float32
- DOUBLE : numpy.double
- VARCHAR : VARCHAR
- JSON : JSON
- Array : Array
JSON est disponible en tant que type de données composite. Un champ JSON comprend des paires clé-valeur. Chaque clé est une chaîne de caractères et une valeur peut être un nombre, une chaîne de caractères, une valeur booléenne, un tableau ou une liste. Pour plus de détails, voir JSON : un nouveau type de données.
- BOOL : booléen (
Prise en charge des champs vectoriels :
- BINARY_VECTOR : stocke les données binaires sous la forme d'une séquence de 0 et de 1. Il est utilisé pour la représentation compacte des caractéristiques dans le traitement des images et la recherche d'informations.
- FLOAT_VECTOR : stocke les nombres à virgule flottante de 32 bits, couramment utilisés dans l'informatique scientifique et l'apprentissage automatique pour représenter les nombres réels.
- FLOAT16_VECTOR : stocke des nombres à virgule flottante de 16 bits en demi-précision, utilisés dans l'apprentissage profond et les calculs GPU pour l'efficacité de la mémoire et de la bande passante.
- BFLOAT16_VECTOR : Stocke les nombres à virgule flottante de 16 bits avec une précision réduite mais la même plage d'exposants que Float32, populaire dans l'apprentissage profond pour réduire les exigences en matière de mémoire et de calcul sans avoir un impact significatif sur la précision.
- SPARSE_FLOAT_VECTOR : stocke une liste d'éléments non nuls et leurs indices correspondants, utilisés pour représenter des vecteurs épars. Pour plus d'informations, voir Vecteurs épars.
Milvus prend en charge plusieurs champs de vecteurs dans une collection. Pour plus d'informations, voir Recherche hybride.
Schéma de collection
Un schéma de collection est la définition logique d'une collection. En général, vous devez définir le schéma des champs avant de définir un schéma de collection et de gérer les collections.
Propriétés du schéma de collection
Propriétés | Description de la collection | Remarque |
---|---|---|
field |
Champs de la collection à créer | Obligatoire |
description |
Description de la collection | Type de données : Chaîne. Facultatif |
partition_key_field |
Nom d'un champ destiné à jouer le rôle de clé de partition. | Type de données : Chaîne. Facultatif |
enable_dynamic_field |
Activation ou non du schéma dynamique | Type de données : Booléen (true ou false ).Facultatif, valeur par défaut : False .Pour plus d'informations sur le schéma dynamique, reportez-vous à Schéma dynamique et aux guides de l'utilisateur pour la gestion des collections. |
Créer un schéma de collection
from pymilvus import DataType, FieldSchema, CollectionSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
# Enable partition key on a field if you need to implement multi-tenancy based on the partition-key field
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)
# Set enable_dynamic_field to True if you need to use dynamic fields.
schema = CollectionSchema(fields=[id_field, age_field, embedding_field], auto_id=False, enable_dynamic_field=True, description="desc of a collection")
Créez une collection avec le schéma spécifié :
from pymilvus import Collection, connections
conn = connections.connect(host="127.0.0.1", port=19530)
collection_name1 = "tutorial_1"
collection1 = Collection(name=collection_name1, schema=schema, using='default', shards_num=2)
- Vous pouvez définir le numéro de dépôt avec
shards_num
. - Vous pouvez définir le serveur Milvus sur lequel vous souhaitez créer une collection en spécifiant l'alias dans
using
. - Vous pouvez activer la fonction de clé de partition sur un champ en définissant
is_partition_key
surTrue
sur le champ si vous devez mettre en œuvre une multi-location basée sur la clé de partition. - Vous pouvez activer le schéma dynamique en remplaçant
enable_dynamic_field
parTrue
dans le schéma de la collection si vous devez activer le champ dynamique.
Vous pouvez également créer une collection à l'aide de Collection.construct_from_dataframe
, qui génère automatiquement un schéma de collection à partir de DataFrame et crée une collection.
from pymilvus import Collection
import pandas as pd
df = pd.DataFrame({
"id": [i for i in range(nb)],
"age": [random.randint(20, 40) for i in range(nb)],
"embedding": [[random.random() for _ in range(dim)] for _ in range(nb)],
"position": "test_pos"
})
collection, ins_res = Collection.construct_from_dataframe(
'my_collection',
df,
primary_field='id',
auto_id=False
)
Prochaines étapes
- Apprenez à préparer le schéma lors de la gestion des collections.
- En savoir plus sur le schéma dynamique.
- En savoir plus sur la clé de partition dans Multi-tenancy.