La classe Collection in Milvus è simile a una tabella in MySQL, utilizzata per organizzare dati e composta da una o più partizioni.
Creare una Collection
Una collection è composta da una o più partizioni. Quando si crea una nuova collection, Milvus creerà automaticamente una partizione predefinita chiamata _default
. Per ulteriori informazioni, consultare l'esplicazione dei termini relativi alle collections.
Nell'esempio seguente verrà creata una collection chiamata book
con due partizioni, comprensiva di un campo chiave primaria chiamato book_id
, un campo scalare INT64
chiamato word_count
, e un campo vettoriale bidimensionale a virgola mobile chiamato book_intro
. Nelle applicazioni reali vengono spesso utilizzati vettori di dimensioni superiori rispetto all'esempio.
Modalità di preparazione
La modalità è simile alla definizione della struttura di una tabella MYSQL.
La raccolta da creare deve contenere un campo chiave primaria e un campo vettoriale. Il campo chiave primaria supporta i tipi di dati INT64 e VarChar.
Prima, preparare i parametri necessari, inclusi lo schema dei campi, lo schema della raccolta e il nome della raccolta.
Prima di definire lo schema della raccolta, creare uno schema per ciascun campo nella raccolta. Per ridurre la complessità dell'inserimento dei dati, Milvus consente di specificare un valore predefinito per ciascun campo scalare (tranne il campo chiave primario). Ciò significa che se si lascia vuoto un campo durante l'inserimento dei dati, sarà utilizzato il valore predefinito configurato durante la creazione dello schema dei campi.
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="Sconosciuto" # Il valore predefinito è "Sconosciuto"
)
word_count = FieldSchema(
name="word_count",
dtype=DataType.INT64,
default_value=9999 # Il valore predefinito è 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="Ricerca di libri di prova", # La descrizione è "Ricerca di libri di prova"
enable_dynamic_field=True # Abilita lo schema dinamico
)
collection_name = "book"
Tipo di schema | Parametro | Descrizione | Opzioni |
---|---|---|---|
FieldSchema |
name |
Il nome del campo da creare. | N/A |
dtype |
Il tipo di dati del campo da creare. | Campo chiave primaria: - DataType.INT64 (numpy.int64) - DataType.VARCHAR (VARCHAR) Campi scalari: - DataType.BOOL (Booleano) - 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) Campi vettoriali: - BINARY_VECTOR (Vettore binario) - FLOAT_VECTOR (Vettore float) |
|
is_primary |
Un interruttore che controlla se il campo è un campo chiave primaria. Questo parametro deve essere specificato per i campi chiave primarie. | True o False |
|
auto_id |
Un interruttore per abilitare o disabilitare l'assegnazione automatica del ID (campo chiave primaria). Questo parametro deve essere specificato per i campi chiave primarie e di default è False . |
True o False |
|
max_length (Richiesto per i campi VARCHAR) |
La lunghezza massima della stringa che può essere inserita. | [1, 65,535] | |
default_value |
Il valore predefinito del campo. Questo parametro si applica solo ai campi scalari non di tipo array e non JSON. Non è possibile specificare un valore predefinito per il campo chiave primaria. Per ulteriori informazioni, consultare il parametro default_value . |
N/A | |
dim (Richiesto per i campi vettoriali) |
La dimensione del vettore. | [1, 32,768] | |
description (Opzionale) |
Descrizione del campo. | N/A | |
CollectionSchema |
fields |
I campi da creare per la raccolta. | N/A |
description (Opzionale) |
Descrizione della raccolta da creare. | N/A | |
enable_dynamic_field |
Se abilitare lo schema dinamico. Tipo di dato: Boolean (true o false ). Opzionale, di default è False . Per ulteriori informazioni sullo schema dinamico, consultare la guida dell'utente per lo schema dinamico e la gestione delle raccolte. |
||
collection_name |
Il nome della raccolta da creare. | N/A |
Creazione di una Collezione con Schema
Successivamente, crea una collezione con lo schema specificato.
from pymilvus import Collection
collezione = Collection(
name=nome_collezione,
schema=schema,
using='default',
shards_num=2
)
Parametro | Descrizione | Opzioni |
---|---|---|
using (opzionale) |
Specifica l'alias del server qui, e scegli dove creare la collezione nel server Milvus. | N/D |
shards_num (opzionale) |
Il numero di shard per la collezione da creare. | [1,16] |
num_partitions (opzionale) |
Il numero logico di partizioni per la collezione da creare. | [1,4096] |
*kwargs: collection.ttl.seconds (opzionale) |
Il TTL della collezione è il tempo di scadenza della collezione. I dati nella collezione scaduta verranno puliti e non parteciperanno a ricerche o query. Specificare il TTL in secondi. | Il valore deve essere 0 o maggiore. 0 significa disabilitare il TTL. |
Limitazioni
Configurazione delle Risorse
Funzionalità | Limite Massimo |
---|---|
Lunghezza del Nome della Collezione | 255 caratteri |
Numero di Partizioni nella Collezione | 4.096 |
Numero di Campi nella Collezione | 64 |
Numero di Shard nella Collezione | 16 |
Parametro default_value
-
default_value
si applica solo a campi scalari non array e non JSON. -
default_value
non si applica alla chiave primaria. - Il tipo di dati di
default_value
deve essere lo stesso del tipo di dati specificato indtype
. Altrimenti potrebbero verificarsi errori. - Nel caso di utilizzo di
auto_id
, non è consentito impostare tutti i campi rimanenti per utilizzare il valore predefinito. In altre parole, durante le operazioni di inserimento o aggiornamento, è necessario specificare il valore di almeno un campo. Altrimenti potrebbero verificarsi errori.
Rinominare una Collezione
Se si desidera rinominare una collezione, è possibile interagire con Milvus utilizzando l'API di rinomina della collezione. Questa guida ti aiuterà a capire come utilizzare il SDK scelto per rinominare una collezione esistente.
Nel seguente frammento di codice, creiamo una collezione e la chiamiamo old_collection
, e poi la rinominiamo in 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),
... ])
collezione = Collection(name="old_collection", schema=schema)
utility.rename_collection("old_collection", "new_collection") # Output: True
utility.has_collection("new_collection") # Output: False
Modifica di una Collezione
Attualmente, la funzione TTL è disponibile solo in Python.
collezione.set_properties(properties={"collection.ttl.seconds": 1800})
Nell'esempio precedente, cambia il TTL della collezione a 1800 secondi.
Verifica se una Collezione Esiste
Verifica se la collezione esiste in Milvus.
from pymilvus import utility
utility.has_collection("book")
Dettagli della Collezione
from pymilvus import Collection
collection = Collection("book") # Ottieni una collezione esistente.
collection.schema # Restituisce il CollectionSchema della collezione.
collection.description # Restituisce la descrizione della collezione.
collection.name # Restituisce il nome della collezione.
collection.is_empty # Restituisce un booleano che indica se la collezione è vuota.
collection.num_entities # Restituisce il numero di entità nella collezione.
collection.primary_field # Restituisce lo schema.FieldSchema della chiave primaria.
collection.partitions # Restituisce una lista di oggetti [Partizione].
collection.indexes # Restituisce una lista di oggetti [Indice].
collection.properties # Restituisce il tempo di scadenza dei dati nella collezione.
Elenca tutte le collezioni
from pymilvus import utility
utility.list_collections()
Elimina una collezione
from pymilvus import utility
utility.drop_collection("book")
Crea un alias per una collezione
from pymilvus import utility
utility.create_alias(
collection_name = "book",
alias = "pubblicazione"
)
Elimina un alias di collezione
from pymilvus import utility
utility.drop_alias(alias = "pubblicazione")
Modificare un alias di una collezione
Modificare un alias esistente in modo che punti a una collezione diversa. L'esempio seguente si basa sullo scenario in cui l'alias publicazione
è stato originariamente creato per un'altra collezione.
from pymilvus import utility
utility.alter_alias(
collection_name = "libro",
alias = "publicazione"
)
Caricare una collezione
Come caricare una collezione in memoria prima di eseguire operazioni di ricerca o interrogazione. In Milvus, tutte le operazioni di ricerca e interrogazione vengono eseguite in memoria.
Milvus consente agli utenti di caricare collezioni come repliche multiple per utilizzare risorse CPU e di memoria aggiuntive dei nodi di interrogazione. Questa funzionalità migliora il QPS complessivo e la capacità senza hardware aggiuntivo. Prima di caricare una collezione, assicurati di aver creato un indice per essa.
from pymilvus import Collection, utility
collection = Collection("libro")
collection.load(replica_number=2)
utility.load_state("libro")
utility.loading_progress("libro")
Rilasciare una collezione
Come rilasciare una collezione dopo le operazioni di ricerca o interrogazione per ridurre l'utilizzo della memoria.
from pymilvus import Collection
collection = Collection("libro")
collection.release()