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
| Area | Limite |
|---|---|
| Struttura dello schema | Una 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 sottocampi | Tutti 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 sottocampi | Una volta creato un campo StructArray, non è possibile aggiungere sottocampi a quel campo StructArray esistente. |
| Percorso del sottocampo | Utilizzare 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 forma | Inserire un campo StructArray come array di oggetti. Non utilizzare la sintassi dei percorsi all'interno dei payload di inserimento. |
| Indici vettoriali | Un 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. |
| Funzioni | Le funzioni di campo non sono supportate per i campi o i sottocampi all'interno di un campo StructArray. |
| Campi nullabili | I 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 campo | L'aggiunta di un campo StructArray a una collezione esistente dipende dalla versione e richiede che il campo aggiunto sia nullabile. |
Limiti dello schema
| Limite | Dettagli |
|---|---|
| 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 Struct | Supporto | Note |
|---|---|---|
Array | Supportato | Definire il sottocampo come ` DataType.BOOL`. |
Array | Supportato | Definire il sottocampo come DataType.INT8, DataType.INT16, DataType.INT32 o DataType.INT64. |
Array | Supportato | Definire il sottocampo come DataType.FLOAT o DataType.DOUBLE. |
Array | Supportato | Definire il sottocampo come DataType.VARCHAR e impostare max_length. |
ArrayOfVector | Supportato | Definire il sottocampo come DataType.FLOAT_VECTOR e impostare dim. |
ArrayOfVector | Supportato | Definire il sottocampo come DataType.FLOAT16_VECTOR e impostare dim. |
ArrayOfVector | Supportato | Definire il sottocampo come DataType.BFLOAT16_VECTOR e impostare dim. |
ArrayOfVector | Supportato | Definire il sottocampo come DataType.INT8_VECTOR e impostare dim. |
ArrayOfVector | Supportato | Definire il sottocampo come " DataType.BINARY_VECTOR " e impostare " dim". |
ArrayOfVector | Non supportato | I sottocampi vettoriali sparsi non sono supportati nei campi StructArray. |
Array | Non supportato | Utilizzare VARCHAR, non String. |
Array | Non supportato | I sottocampi JSON non sono supportati nei campi StructArray. |
Array | Non supportato | I sottocampi di geometria e le funzioni GIS non sono supportati nei campi StructArray. |
Array | Non supportato | I sottocampi di tipo "Text" non sono supportati nei campi StructArray. |
Array | Non supportato | I sottocampi "timestamptz" e le espressioni relative al tempo non sono supportati nei campi StructArray. |
Array, ArrayOfVector, Struct o ArrayOfStruct | Non supportato | I 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 nullabile | Supportato 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 Python | Utilizzare ` None ` per inserire un valore `StructArray` nullo in Python. Non utilizzare ` Null ` o ` null`. |
| Ambito del valore nullo | Il valore nullo si applica all'intero campo StructArray. Ad esempio, chunks=None è valido solo quando chunks è nullabile. |
| Valore StructArray parzialmente nullo | Quando 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 StructArray | Supportato in Milvus 3.0.0 e versioni successive. |
| Requisito di nullabilità per l’aggiunta dinamica | Un 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 dinamica | Le 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
| Limite | Dettagli |
|---|---|
| Struttura del payload | Inserire il campo StructArray come array di oggetti Struct, ad esempio chunks: [{"text": "...", "emb": [...]}]. |
| Nomi dei sottocampi | All'interno di ciascun oggetto Struct, utilizzare nomi di sottocampi quali text e emb, non percorsi quali chunks[text]. |
| Allineamento allo schema | Ogni elemento Struct deve corrispondere allo schema Struct. |
| Capacità | Il numero di elementi Struct in un’entità non deve superare max_capacity. |
| Dimensioni del vettore | I valori vettoriali devono corrispondere all'dim e configurata per i relativi sottocampi vettoriali. |
| Duplicazione in modalità di ricerca | Se 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 ricerca | Famiglia di metriche | Livello dei risultati |
|---|---|---|
| Ricerca EmbeddingList | MAX_SIM, MAX_SIM_COSINE, MAX_SIM_IP, MAX_SIM_L2, o metriche binarie MAX_SIM_* | Risultati a livello di entità. |
| Ricerca a livello di elemento | Metriche vettoriali regolari quali L2, IP, COSINE, HAMMING o JACCARD | Risultati 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 ricerca | Supporto e limiti |
|---|---|
| Ricerca di base in EmbeddingList | Supportata sui sottocampi vettoriali di StructArray indicizzati con metriche di tipo " MAX_SIM* ". Restituisce risultati a livello di entità. |
| Ricerca di base a livello di elemento | Supportata sui sottocampi vettoriali di StructArray indicizzati con metriche vettoriali regolari. Può restituire gli offset degli elementi corrispondenti. |
| Ricerca per intervallo | Supportata 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 raggruppamento | La 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 ibrida | Una 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 offset | L'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.
Pagine correlate
Per creare un campo StructArray, consultare Creare un campo StructArray.
Per inserire dati, consultare Inserimento di dati nei campi StructArray.
Per creare indici vettoriali e scalari, consultare Indice dei campi StructArray.
Per rivedere la sintassi dei filtri StructArray, consultare Operatori StructArray.