milvus-logo
LFAI
Casa
  • Guida per l'utente

Gestire gli schemi

Questo argomento introduce lo schema in Milvus. Lo schema viene utilizzato per definire le proprietà di una collezione e i campi al suo interno.

Schema del campo

Lo schema di un campo è la definizione logica di un campo. È la prima cosa da definire prima di definire uno schema di collezione e di gestire le collezioni.

Milvus supporta solo un campo chiave primaria in una collezione.

Proprietà dello schema di campo

Proprietà Descrizione Nota
name Nome del campo della collezione da creare Tipo di dati: Stringa.
Obbligatorio
dtype Tipo di dati del campo Obbligatorio
description Descrizione del campo Tipo di dati: Stringa.
Opzionale
is_primary Se impostare il campo come chiave primaria o meno Tipo di dati: Booleano (true o false).
Obbligatorio per il campo chiave primaria
auto_id (Obbligatorio per il campo chiave primaria) Interruttore per abilitare o disabilitare l'assegnazione automatica dell'ID (chiave primaria). True o False
max_length (Obbligatorio per il campo VARCHAR) Lunghezza massima di byte per le stringhe che possono essere inserite. Si noti che i caratteri multibyte (ad esempio, i caratteri Unicode) possono occupare più di un byte ciascuno, quindi assicurarsi che la lunghezza in byte delle stringhe inserite non superi il limite specificato. [1, 65,535]
dim Dimensione del vettore Tipo di dati: Integer ∈[1, 32768].
Obbligatorio per un campo vettoriale denso. Omettere per un campo vettoriale rado.
is_partition_key Se questo campo è un campo a chiave di partizione. Tipo di dati: Booleano (true o false).

Creare uno schema di campo

Per ridurre la complessità degli inserimenti di dati, Milvus consente di specificare un valore predefinito per ogni campo scalare durante la creazione dello schema di campo, escluso il campo chiave primaria. Ciò significa che se si lascia un campo vuoto durante l'inserimento dei dati, si applica il valore predefinito specificato per questo campo.

Creare uno schema di campo regolare:

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)

Crea uno schema di campo con valori di campo predefiniti:

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")
]

Tipi di dati supportati

DataType definisce il tipo di dati che un campo contiene. Campi diversi supportano tipi di dati diversi.

  • Il campo chiave primaria supporta:

    • INT64: numpy.int64
    • VARCHAR: VARCHAR
  • Il campo scalare supporta:

    • BOOL: booleano (true o false)
    • INT8: numpy.int8
    • INT16: numpy.int16
    • INT32: numpy.int32
    • INT64: numpy.int64
    • FIATO: numpy.float32
    • DOPPIO: numpy.double
    • VARCHAR: VARCHAR
    • JSON: JSON
    • Array: Array

    È disponibile JSON come tipo di dati composito. Un campo JSON comprende coppie chiave-valore. Ogni chiave è una stringa e il valore può essere un numero, una stringa, un valore booleano, un array o un elenco. Per maggiori dettagli, consultare JSON: un nuovo tipo di dati.

  • Il campo vettore supporta:

    • BINARY_VECTOR: memorizza dati binari come sequenza di 0 e 1, utilizzati per la rappresentazione compatta delle caratteristiche nell'elaborazione delle immagini e nel recupero delle informazioni.
    • FLOAT_VECTOR: memorizza numeri a virgola mobile a 32 bit, comunemente usati nell'informatica scientifica e nell'apprendimento automatico per rappresentare i numeri reali.
    • FLOAT16_VECTOR: memorizza numeri in virgola mobile a mezza precisione a 16 bit, utilizzati nell'apprendimento profondo e nei calcoli su GPU per l'efficienza della memoria e della larghezza di banda.
    • BFLOAT16_VECTOR: memorizza numeri in virgola mobile a 16 bit con precisione ridotta ma con lo stesso intervallo di esponenti di Float32, utilizzati nel deep learning per ridurre i requisiti di memoria e di calcolo senza impattare significativamente sulla precisione.
    • SPARSE_FLOAT_VECTOR: memorizza un elenco di elementi non nulli e i loro indici corrispondenti, utilizzati per rappresentare vettori sparsi. Per ulteriori informazioni, consultare Vettori sparsi.

    Milvus supporta campi vettoriali multipli in un insieme. Per ulteriori informazioni, consultare la sezione Ricerca ibrida.

Schema della collezione

Lo schema di una collezione è la definizione logica di una collezione. Di solito è necessario definire lo schema dei campi prima di definire uno schema di raccolta e gestire le raccolte.

Proprietà dello schema di raccolta

Proprietà Descrizione Nota
field Campi della collezione da creare Obbligatorio
description Descrizione della collezione Tipo di dati: Stringa.
Opzionale
partition_key_field Nome di un campo destinato a fungere da chiave di partizione. Tipo di dati: Stringa.
Opzionale
enable_dynamic_field Se abilitare o meno lo schema dinamico Tipo di dati: Booleano (true o false).
Opzionale, per impostazione predefinita False.
Per informazioni dettagliate sullo schema dinamico, consultare Schema dinamico e le guide utente per la gestione delle raccolte.

Creare uno schema di raccolta

Definire gli schemi dei campi prima di definire uno schema di raccolta.
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")

Creare una raccolta con lo schema specificato:

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)
  • È possibile definire il numero di shard con shards_num.
  • È possibile definire il server Milvus su cui si desidera creare una raccolta specificando l'alias in using.
  • È possibile abilitare la funzione di chiave di partizione su un campo impostando is_partition_key su True se si desidera implementare la multi-tenancy basata su chiavi di partizione.
  • È possibile abilitare lo schema dinamico impostando enable_dynamic_field su True nello schema della raccolta, se si desidera abilitare un campo dinamico.


Si può anche creare una collezione con Collection.construct_from_dataframe, che genera automaticamente uno schema di collezione da DataFrame e crea una collezione.

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
    )

Cosa succede dopo

Tradotto daDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

Questa pagina è stata utile?