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 in dtype. 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()