Limites do StructArray

O suporte ao StructArray abrange a definição do esquema, a inserção de cargas úteis, a indexação, os modos de pesquisa e os filtros específicos do StructArray. Utilize esta página como referência de limites antes de confiar no comportamento do StructArray em produção.

A maioria dos limites do StructArray provém de uma de três fontes: o modelo de esquema do StructArray, o modo de pesquisa que escolher para os subcampos vetoriais e a versão do Milvus em que a sua coleção é executada.

Visão geral dos limites

ÁreaLimite
Formato do esquemaUm Struct só pode ser utilizado como tipo de elemento de um campo Array. O Struct não é suportado como campo de coleção de nível superior.
Esquema do subcampoTodos os elementos Struct no mesmo campo StructArray partilham um esquema Struct predefinido.
A capacidademax_capacity é obrigatório e limita o número de elementos Struct que uma entidade pode armazenar no campo StructArray.
Alterações no subcampoApós a criação de um campo StructArray, não é possível adicionar subcampos a esse campo StructArray já existente.
Caminho do subcampoUtilize percursos do tipo structArray[subfield], tais como chunks[emb], para índices, alvos de pesquisa, campos de saída e filtros. Não utilize chunks.emb.
Inserir formaInserir um campo StructArray como uma matriz de objetos. Não utilize a sintaxe de caminho no interior de cargas de inserção.
Índices vetoriaisUm campo vetorial ou subcampo vetorial aceita apenas um índice. Utilize subcampos vetoriais separados para a pesquisa EmbeddingList e a pesquisa ao nível do elemento.
FunçõesAs funções de campo não são suportadas para campos ou subcampos dentro de um campo StructArray.
Campos nulosOs campos StructArray nulos estão sujeitos a restrições de versão. Quando suportados, o valor nulo aplica-se a todo o campo StructArray, e não a um elemento Struct individual de forma independente.
Adicionar campo dinâmicoA adição de um campo StructArray a uma coleção existente está sujeita a restrições de versão e requer que o campo adicionado seja nulo.

Limites do esquema

LimiteDetalhes
Struct não é um tipo de campo de nível superior.Crie um campo StructArray como um « datatype=DataType.ARRAY » com « element_type=DataType.STRUCT » e um « struct_schema ».
Todos os elementos partilham um único esquema.Cada elemento Struct num campo StructArray segue a mesma lista de subcampos e os mesmos tipos de dados dos subcampos.
max_capacity é obrigatório.O número de elementos Struct numa entidade não deve exceder o max_capacity configurado para o campo StructArray.
Os subcampos existentes são fixos.Não é possível acrescentar novos subcampos a um campo StructArray existente. Para alterar o esquema de subcampos, remova o campo StructArray e adicione-o novamente com o esquema atualizado.
O StructArray aninhado não é suportado.Um campo StructArray não pode conter subcampos Array, ArrayOfVector, Struct ou ArrayOfStruct aninhados.
As funções não são suportadas dentro de StructArray.Não defina funções de campo para campos StructArray nem para os seus subcampos.

Para exemplos de criação de esquemas, consulte Criar um campo StructArray.

Tipos de dados de subcampos suportados

Os subcampos do StructArray correspondem a um armazenamento físico do tipo matriz. A tabela seguinte lista os tipos físicos suportados e não suportados.

Tipo físico do subcampo StructSuporteNotas
ArraySuportadoDefina o subcampo como DataType.BOOL.
ArrayCompatívelDefina o subcampo como DataType.INT8, DataType.INT16, DataType.INT32 ou DataType.INT64.
ArrayCompatívelDefina o subcampo como DataType.FLOAT ou DataType.DOUBLE.
ArrayCompatívelDefina o subcampo como « DataType.VARCHAR » e configure « max_length ».
ArrayOfVectorCompatívelDefina o subcampo como « DataType.FLOAT_VECTOR » e defina « dim ».
ArrayOfVectorCompatívelDefina o subcampo como « DataType.FLOAT16_VECTOR » e configure « dim ».
ArrayOfVectorCompatívelDefina o subcampo como « DataType.BFLOAT16_VECTOR » e defina « dim ».
ArrayOfVectorCompatívelDefina o subcampo como « DataType.INT8_VECTOR » e defina « dim ».
ArrayOfVectorCompatívelDefina o subcampo como « DataType.BINARY_VECTOR » e defina « dim ».
ArrayOfVectorNão suportadoOs subcampos de vetores esparsos não são suportados nos campos StructArray.
ArrayNão suportadoUtilize « VARCHAR », e não « String ».
ArrayNão suportadoOs subcampos JSON não são suportados nos campos StructArray.
ArrayNão suportadoOs subcampos de geometria e as funções GIS não são suportados nos campos StructArray.
ArrayNão suportadoOs subcampos de texto não são suportados nos campos StructArray.
ArrayNão suportadoOs subcampos «timestamptz» e as expressões específicas de hora não são suportados nos campos StructArray.
Array, ArrayOfVector, Struct ou ArrayOfStructNão suportadoOs campos StructArray não suportam subcampos aninhados do tipo array, vector-array, Struct ou Array-of-Struct.

Limites de esquemas nulos e dinâmicos

O comportamento do StructArray nulo e a adição dinâmica de campos StructArray dependem da versão.

CapacidadeLimite
Campo StructArray nuloSuportado no Milvus 3.0.0 e versões posteriores. Defina ` nullable=True ` no StructArray pai; não configure os subcampos do Struct como nulos de forma independente.
Valor nulo em PythonUtilize ` None ` para inserir um valor `StructArray` nulo em Python. Não utilize ` Null ` nem ` null`.
Âmbito do valor nuloO valor nulo aplica-se a todo o campo StructArray. Por exemplo, chunks=None só é válido quando chunks é nulo.
Valor StructArray parcialmente nuloQuando um campo StructArray contém um valor de matriz válido, não misture matrizes de subcampos nulos com matrizes de subcampos válidas no mesmo valor.
Adicionar dinamicamente um campo StructArraySuportado no Milvus 3.0.0 e versões posteriores.
Requisito de nulo para adição dinâmicaUm campo StructArray adicionado a uma coleção existente deve ser nulo, uma vez que as entidades existentes não têm valor para o novo campo.
Entidades existentes após a adição dinâmicaAs entidades existentes devolvem « null » para o campo StructArray adicionado.

O Milvus 3.0.0 e versões posteriores suportam campos StructArray nulos, matrizes vetoriais nulas e adição dinâmica de campos StructArray, tanto em implementações autónomas como distribuídas. As versões anteriores do Milvus não suportam estas funcionalidades.

No Zilliz Cloud, estas funcionalidades estão disponíveis em clusters On-Demand que executam o Milvus 3.0.0 ou versões posteriores. Os clusters de serviço não as suportam.

Para exemplos de inserção com campos StructArray nulos, consulte Inserir dados em campos StructArray.

Limites de inserção

LimiteDetalhes
Formato da carga útilInserir o campo StructArray como uma matriz de objetos Struct, como por exemplo chunks: [{"text": "...", "emb": [...]}].
Nomes dos subcamposDentro de cada objeto Struct, utilize nomes de subcampos como text e emb, e não percursos como chunks[text].
Alinhamento com o esquemaCada elemento Struct deve corresponder ao esquema Struct.
CapacidadeO número de elementos Struct numa entidade não deve exceder max_capacity.
Dimensões do vetorOs valores do vetor devem corresponder à dim configurada para os seus subcampos vetoriais.
Duplicação no modo de pesquisaSe necessitar tanto da pesquisa EmbeddingList como da pesquisa ao nível do elemento, escreva os vetores em dois subcampos de vetor separados.

Limites de índice e métrica

Um subcampo vetorial StructArray pode ser indexado para pesquisa EmbeddingList ou para pesquisa ao nível do elemento. O mesmo subcampo vetorial não pode utilizar ambas as famílias de métricas, uma vez que cada campo vetorial ou subcampo vetorial aceita apenas um índice.

Modo de pesquisaFamília de métricasNível de resultado
Pesquisa EmbeddingListMAX_SIM, métricas « MAX_SIM_COSINE », « MAX_SIM_IP », « MAX_SIM_L2 » ou « MAX_SIM_* » bináriasResultados ao nível da entidade.
Pesquisa ao nível do elementoMétricas vetoriais regulares, tais como L2, IP, COSINE, HAMMING ou JACCARDResultados ao nível do elemento que podem incluir o deslocamento do elemento correspondente.

Utilize subcampos vetoriais separados quando ambos os modos forem necessários. Por exemplo, utilize chunks[emb_list_vector] para a pesquisa EmbeddingList e chunks[emb] para a pesquisa ao nível do elemento.

Os subcampos vetoriais do StructArray contam como subcampos vetoriais quando planear o esquema da sua coleção. Mantenha o número total de campos vetoriais e subcampos vetoriais dentro dos limites da sua versão de destino e nível de serviço.

Para conhecer a matriz de tipos de índice e de métrica suportados, consulte Campos StructArray do índice.

Limites de pesquisa

Comportamento da pesquisaSuporte e limites
Pesquisa básica no EmbeddingListSuportada em subcampos vetoriais StructArray indexados com métric MAX_SIM*. Devolve resultados ao nível da entidade.
Pesquisa básica ao nível do elementoSuportada em subcampos vetoriais do StructArray indexados com métricas vetoriais regulares. Pode devolver os deslocamentos dos elementos correspondentes.
Pesquisa por intervaloSuportada de acordo com o modo de pesquisa e o suporte a índices/métricas da versão de destino. Para o comportamento do intervalo de pesquisa híbrido em pedidos StructArray ao nível do elemento, verifique a sua versão de destino.
Pesquisa por agrupamentoA pesquisa agrupada ao nível do elemento pode devolver deslocamentos. O comportamento de agrupamento na pesquisa híbrida para pedidos StructArray ao nível do elemento depende da versão.
Pesquisa híbridaUma solicitação de pesquisa híbrida só pode incluir solicitações de subcampos vetoriais StructArray se a versão de destino suportar essa combinação de pesquisa. Cada solicitação continua a seguir a família de métricas do subcampo vetorial indexado.
Saída de deslocamentoO deslocamento está disponível para resultados de pesquisa ao nível do elemento. A pesquisa EmbeddingList devolve resultados ao nível da entidade e não utiliza deslocamentos de elementos como unidade principal de resultados.

Limites de filtros e operadores

A filtragem escalar do StructArray é tratada por operadores do StructArray, tais como « element_filter » e a família « MATCH_* ». A matriz detalhada de suporte a predicados encontra-se em «Operadores do StructArray».

A um nível geral:

  • Utilize o ` $[subfield] ` apenas dentro de operadores `StructArray`.

  • Utilize subcampos escalares para predicados escalares.

  • Não utilize subcampos vetoriais como entradas de predicados escalares de « $[...] ».

  • A sintaxe JSON path, as funções JSON, as funções de contentores de matrizes, as funções de correspondência de texto, as funções de geometria/SIG e as expressões Timestamptz não são suportadas para predicados ao nível do elemento StructArray.

  • Dê preferência a comparações booleanas explícitas, como « $[has_code] == true », em vez de expressões booleanas simples.

  1. Para criar um campo StructArray, consulte «Criar um campo StructArray».

  2. Para inserir dados, leia Inserir dados em campos StructArray.

  3. Para criar índices vetoriais e escalares, consulte «Indexar campos StructArray».

  4. Para rever a sintaxe do filtro StructArray, consulte «Operadores StructArray».