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
ofalse
) - 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.
- BOOL: booleano (
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
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
suTrue
se si desidera implementare la multi-tenancy basata su chiavi di partizione. - È possibile abilitare lo schema dinamico impostando
enable_dynamic_field
suTrue
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
- Imparare a preparare lo schema quando si gestiscono le raccolte.
- Per saperne di più sullo schema dinamico.
- Per saperne di più sulla chiave di partizione in Multi-tenancy.