Modifica dello schema di una raccolta esternaCompatible with Milvus 3.0.x

Le fonti di dati esterne spesso subiscono modifiche dopo la creazione di una raccolta esterna. Ad esempio, una tabella Lakehouse che memorizza già gli embedding potrebbe in seguito includere un nuovo campo scalare, come un punteggio, una categoria o un timestamp, che si desidera restituire nei risultati delle query o utilizzare nei filtri.

Anziché ricreare la raccolta esterna o copiare i dati di origine in Milvus, aggiungere un campo Milvus che si mappi al campo esistente nella fonte di dati esterna. Dopo aver aggiunto il campo, aggiornare la raccolta esterna in modo che il nuovo campo possa essere utilizzato nelle query e nelle ricerche.

Limiti

  • Le collezioni esterne attualmente supportano l’aggiunta di campi dopo la creazione. Altre modifiche allo schema, come l’eliminazione di campi, la ridenominazione di campi, la modifica dei tipi di dati dei campi, la modifica delle dimensioni dei vettori o la rimappatura di external_field, non sono supportate.

  • È possibile aggiungere solo un campo già esistente nella fonte di dati esterna. Questa operazione mappa un campo esterno esistente a un campo di Milvus. Non crea un nuovo campo nella fonte di dati esterna né esegue il backfill dei dati di origine.

  • L’aggiunta di campi di tipo ` SPARSE_FLOAT_VECTOR ` a una raccolta esterna esistente non è supportata.

  • L'aggiunta di campi StructArray a una raccolta esterna esistente non è supportata. Se la raccolta esterna richiede un campo StructArray, definirlo nello schema della raccolta al momento della creazione della stessa.

Aggiungere un campo

Prima di aggiungere un campo a una raccolta esterna, verificare che il campo esista già nella fonte di dati esterna. Quindi richiamare ` add_collection_field() ` per esporre quel campo in Milvus impostando ` external_field ` sul nome del campo nella fonte di dati esterna. Impostare ` data_type ` sul tipo di dati Milvus corrispondente al campo nella fonte di dati esterna. Ad esempio, se il campo mappato memorizza valori a doppia precisione, utilizzare ` DataType.DOUBLE`.

A differenza delle collezioni gestite, i valori del campo aggiunto vengono letti dalla fonte di dati esterna dopo l’aggiornamento della collezione esterna.

Aggiungere un campo scalare

Utilizzare add_collection_field() per aggiungere un campo scalare quando si desidera restituire il campo nei risultati della query o utilizzarlo nei filtri. L’esempio seguente aggiunge un campo score che viene mappato al campo score nella fonte di dati esterna.

from pymilvus import DataType, MilvusClient

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus",
)

client.add_collection_field(
    collection_name="product_embeddings",
    field_name="score",
    data_type=DataType.DOUBLE,
    nullable=True,
    external_field="score",
)

In questo esempio, ` score ` è il nome del campo Milvus e ` external_field="score" ` lo mappa al campo ` score ` nella fonte di dati esterna. Impostare ` nullable=True ` poiché il campo viene aggiunto dopo che la collezione è già stata creata.

Aggiungere un campo vettoriale

È inoltre possibile aggiungere un campo vettoriale se la fonte di dati esterna contiene già i valori vettoriali. Impostare il vettore data_type e dim in modo che corrispondano al campo vettoriale nella fonte di dati esterna.

L'esempio seguente aggiunge un campo vettoriale denso denominato image_embedding_v2.

from pymilvus import DataType, MilvusClient

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus",
)

client.add_collection_field(
    collection_name="product_embeddings",
    field_name="image_embedding_v2",
    data_type=DataType.FLOAT_VECTOR,
    dim=768,
    nullable=True,
    external_field="image_embedding_v2",
)

Se si intende eseguire una ricerca vettoriale sul campo vettoriale aggiunto, creare un indice per il campo prima di aggiornare la raccolta esterna.

index_params = client.prepare_index_params()

index_params.add_index(
    field_name="image_embedding_v2",
    index_type="AUTOINDEX",
    metric_type="COSINE",
)

client.create_index(
    collection_name="product_embeddings",
    index_params=index_params,
)

Aggiornare la raccolta esterna

Dopo aver modificato lo schema di una raccolta esterna, aggiorna la raccolta esterna in modo che Milvus aggiorni i metadati della raccolta esterna e renda effettiva la modifica dello schema nei risultati delle query, delle ricerche e dei filtri.

client.refresh_external_collection(
    collection_name="product_embeddings"
)

Tradotto daDeepL

Prova Milvus gestito gratuitamente

Zilliz Cloud è senza problemi, basato su Milvus e 10 volte più veloce.

Inizia
Feedback

Questa pagina è stata utile?