milvus-logo
LFAI
Home
  • Guide de l'utilisateur

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 ou false)
    • 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.

  • 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

Définissez les schémas de champ avant de définir 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 sur True 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 par True 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

Traduit parDeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Cette page a-t - elle été utile ?