Limiti di StructArray

Il supporto di StructArray copre la definizione dello schema, l'inserimento dei payload, l'indicizzazione, le modalità di ricerca e i filtri specifici di StructArray. Utilizza questa pagina come riferimento per i limiti prima di affidarti al comportamento di StructArray in produzione.

La maggior parte dei limiti di StructArray deriva da una delle tre fonti seguenti: il modello di schema di StructArray, la modalità di ricerca scelta per i sottocampi vettoriali e la versione di Milvus su cui gira la propria collezione.

Panoramica dei limiti

AreaLimite
Struttura dello schemaUna Struct può essere utilizzata solo come tipo di elemento di un campo Array. La Struct non è supportata come campo di collezione di primo livello.
Schema dei sottocampiTutti gli elementi Struct presenti nello stesso campo StructArray condividono un unico schema Struct predefinito.
Capacitàmax_capacity è obbligatorio e limita il numero di elementi Struct che un'entità può memorizzare nel campo StructArray.
Modifiche ai sottocampiUna volta creato un campo StructArray, non è possibile aggiungere sottocampi a quel campo StructArray esistente.
Percorso del sottocampoUtilizzare percorsi del tipo structArray[subfield], ad esempio chunks[emb], per indici, obiettivi di ricerca, campi di output e filtri. Non utilizzare chunks.emb.
Inserimento della formaInserire un campo StructArray come array di oggetti. Non utilizzare la sintassi dei percorsi all'interno dei payload di inserimento.
Indici vettorialiUn campo vettoriale o un sottocampo vettoriale accetta un solo indice. Utilizzare sottocampi vettoriali separati per la ricerca EmbeddingList e la ricerca a livello di elemento.
FunzioniLe funzioni di campo non sono supportate per i campi o i sottocampi all'interno di un campo StructArray.
Campi nullabiliI campi StructArray nullabili sono soggetti a limitazioni di versione. Quando supportati, il valore null si applica all'intero campo StructArray, non a singoli elementi Struct in modo indipendente.
Aggiunta dinamica di un campoL'aggiunta di un campo StructArray a una collezione esistente dipende dalla versione e richiede che il campo aggiunto sia nullabile.

Limiti dello schema

LimiteDettagli
Struct non è un tipo di campo di primo livello.Creare un campo StructArray come datatype=DataType.ARRAY con element_type=DataType.STRUCT e un struct_schema.
Tutti gli elementi condividono un unico schema.Ogni elemento Struct in un campo StructArray segue lo stesso elenco di sottocampi e gli stessi tipi di dati dei sottocampi.
max_capacity è obbligatorio.Il numero di elementi Struct in un'entità non deve superare l'max_capacity e configurata per il campo StructArray.
I sottocampi esistenti sono fissi.Non è possibile aggiungere nuovi sottocampi a un campo StructArray esistente. Per modificare lo schema dei sottocampi, eliminare il campo StructArray e aggiungerlo nuovamente con lo schema aggiornato.
Gli StructArray annidati non sono supportati.Un campo StructArray non può contenere sottocampi annidati di tipo Array, ArrayOfVector, Struct o ArrayOfStruct.
Le funzioni non sono supportate all'interno di StructArray.Non definire funzioni di campo per i campi StructArray o i relativi sottocampi.

Per esempi sulla creazione di schemi, vedere Creare un campo StructArray.

Tipi di dati dei sottocampi supportati

I sottocampi di StructArray corrispondono a una memoria fisica di tipo array. La tabella seguente elenca i tipi fisici supportati e quelli non supportati.

Tipo fisico del sottocampo StructSupportoNote
ArraySupportatoDefinire il sottocampo come ` DataType.BOOL`.
ArraySupportatoDefinire il sottocampo come DataType.INT8, DataType.INT16, DataType.INT32 o DataType.INT64.
ArraySupportatoDefinire il sottocampo come DataType.FLOAT o DataType.DOUBLE.
ArraySupportatoDefinire il sottocampo come DataType.VARCHAR e impostare max_length.
ArrayOfVectorSupportatoDefinire il sottocampo come DataType.FLOAT_VECTOR e impostare dim.
ArrayOfVectorSupportatoDefinire il sottocampo come DataType.FLOAT16_VECTOR e impostare dim.
ArrayOfVectorSupportatoDefinire il sottocampo come DataType.BFLOAT16_VECTOR e impostare dim.
ArrayOfVectorSupportatoDefinire il sottocampo come DataType.INT8_VECTOR e impostare dim.
ArrayOfVectorSupportatoDefinire il sottocampo come " DataType.BINARY_VECTOR " e impostare " dim".
ArrayOfVectorNon supportatoI sottocampi vettoriali sparsi non sono supportati nei campi StructArray.
ArrayNon supportatoUtilizzare VARCHAR, non String.
ArrayNon supportatoI sottocampi JSON non sono supportati nei campi StructArray.
ArrayNon supportatoI sottocampi di geometria e le funzioni GIS non sono supportati nei campi StructArray.
ArrayNon supportatoI sottocampi di tipo "Text" non sono supportati nei campi StructArray.
ArrayNon supportatoI sottocampi "timestamptz" e le espressioni relative al tempo non sono supportati nei campi StructArray.
Array, ArrayOfVector, Struct o ArrayOfStructNon supportatoI campi StructArray non supportano sottocampi annidati di tipo array, array vettoriale, Struct o Array-of-Struct.

Limiti relativi agli schemi nullabili e dinamici

Il comportamento di StructArray con valori null e l’aggiunta dinamica di campi StructArray dipendono dalla versione.

FunzionalitàLimite
Campo StructArray nullabileSupportato a partire da Milvus 3.0.0. Impostare ` nullable=True ` sul StructArray padre; non configurare i sottocampi di Struct come nullabili in modo indipendente.
Valore nullo in PythonUtilizzare ` None ` per inserire un valore `StructArray` nullo in Python. Non utilizzare ` Null ` o ` null`.
Ambito del valore nulloIl valore nullo si applica all'intero campo StructArray. Ad esempio, chunks=None è valido solo quando chunks è nullabile.
Valore StructArray parzialmente nulloQuando un campo StructArray contiene un valore array valido, non mescolare array di sottocampi null con array di sottocampi validi nello stesso valore.
Aggiunta dinamica di un campo StructArraySupportato in Milvus 3.0.0 e versioni successive.
Requisito di nullabilità per l’aggiunta dinamicaUn campo StructArray aggiunto a una raccolta esistente deve essere nullabile poiché le entità esistenti non dispongono di alcun valore per il nuovo campo.
Entità esistenti dopo l’aggiunta dinamicaLe entità esistenti restituiscono un valore di tip null e per il campo StructArray aggiunto.

Milvus 3.0.0 e le versioni successive supportano i campi StructArray nullabili, gli array vettoriali nullabili e l’aggiunta dinamica di campi StructArray sia nelle distribuzioni standalone che in quelle distribuite. Le versioni precedenti di Milvus non supportano queste funzionalità.

In Zilliz Cloud, queste funzionalità sono disponibili sui cluster On-Demand che eseguono Milvus 3.0.0 o versioni successive. I cluster di servizio non le supportano.

Per esempi di inserimento con campi StructArray nullabili, consultare Inserimento di dati nei campi StructArray.

Limiti di inserimento

LimiteDettagli
Struttura del payloadInserire il campo StructArray come array di oggetti Struct, ad esempio chunks: [{"text": "...", "emb": [...]}].
Nomi dei sottocampiAll'interno di ciascun oggetto Struct, utilizzare nomi di sottocampi quali text e emb, non percorsi quali chunks[text].
Allineamento allo schemaOgni elemento Struct deve corrispondere allo schema Struct.
CapacitàIl numero di elementi Struct in un’entità non deve superare max_capacity.
Dimensioni del vettoreI valori vettoriali devono corrispondere all'dim e configurata per i relativi sottocampi vettoriali.
Duplicazione in modalità di ricercaSe sono necessarie sia la ricerca EmbeddingList che quella a livello di elemento, scrivere i vettori in due sottocampi vettoriali distinti.

Limiti di indice e metrica

Un sottocampo vettoriale StructArray può essere indicizzato sia per la ricerca EmbeddingList che per la ricerca a livello di elemento. Lo stesso sottocampo vettoriale non può utilizzare entrambe le famiglie di metriche poiché ogni campo vettoriale o sottocampo vettoriale accetta un solo indice.

Modalità di ricercaFamiglia di metricheLivello dei risultati
Ricerca EmbeddingListMAX_SIM, MAX_SIM_COSINE, MAX_SIM_IP, MAX_SIM_L2, o metriche binarie MAX_SIM_* Risultati a livello di entità.
Ricerca a livello di elementoMetriche vettoriali regolari quali L2, IP, COSINE, HAMMING o JACCARDRisultati a livello di elemento che possono includere l’offset dell’elemento corrispondente.

Utilizzare sottocampi vettoriali separati quando sono richieste entrambe le modalità. Ad esempio, utilizzare chunks[emb_list_vector] per la ricerca EmbeddingList e chunks[emb] per la ricerca a livello di elemento.

I sottocampi vettoriali StructArray vengono considerati come sottocampi vettoriali quando si pianifica lo schema della raccolta. Mantenere il numero totale di campi vettoriali e sottocampi vettoriali entro i limiti della versione di destinazione e del livello di servizio.

Per la matrice dei tipi di indice e dei tipi di metrica supportati, vedere Campi StructArray dell’indice.

Limiti di ricerca

Comportamento della ricercaSupporto e limiti
Ricerca di base in EmbeddingListSupportata sui sottocampi vettoriali di StructArray indicizzati con metriche di tipo " MAX_SIM* ". Restituisce risultati a livello di entità.
Ricerca di base a livello di elementoSupportata sui sottocampi vettoriali di StructArray indicizzati con metriche vettoriali regolari. Può restituire gli offset degli elementi corrispondenti.
Ricerca per intervalloSupportata in base alla modalità di ricerca e al supporto di indici/metriche della versione di destinazione. Per il comportamento dell'intervallo di ricerca ibrido nelle richieste StructArray a livello di elemento, verificare la versione di destinazione.
Ricerca con raggruppamentoLa ricerca raggruppata a livello di elemento può restituire gli offset. Il comportamento del raggruppamento nella ricerca ibrida per le richieste StructArray a livello di elemento dipende dalla versione.
Ricerca ibridaUna richiesta di ricerca ibrida può includere richieste relative ai sottocampi vettoriali di StructArray solo se la versione di destinazione supporta quella combinazione di ricerca. Ogni richiesta segue comunque la famiglia di metriche del sottocampo vettoriale indicizzato.
Output offsetL'offset è disponibile per i risultati di ricerca a livello di elemento. La ricerca EmbeddingList restituisce risultati a livello di entità e non utilizza gli offset degli elementi come unità di risultato primaria.

Limiti dei filtri e degli operatori

Il filtraggio scalare di StructArray è gestito dagli operatori StructArray, quali element_filter e la famiglia MATCH_*. La matrice dettagliata di supporto dei predicati è riportata nella sezione Operatori StructArray.

A livello generale:

  • Utilizzare ` $[subfield] ` solo all’interno degli operatori StructArray.

  • Utilizzare i sottocampi scalari per i predicati scalari.

  • Non utilizzare sottocampi vettoriali come input per i predicati scalari di tipo « $[...] ».

  • La sintassi JSON path, le funzioni JSON, le funzioni dei contenitori array, le funzioni di corrispondenza del testo, le funzioni di geometria/GIS e le espressioni Timestamptz non sono supportate per i predicati a livello di elemento di StructArray.

  • Preferire confronti booleani espliciti, come ad esempio ` $[has_code] == true `, anziché semplici espressioni booleane.

  1. Per creare un campo StructArray, consultare Creare un campo StructArray.

  2. Per inserire dati, consultare Inserimento di dati nei campi StructArray.

  3. Per creare indici vettoriali e scalari, consultare Indice dei campi StructArray.

  4. Per rivedere la sintassi dei filtri StructArray, consultare Operatori StructArray.