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
| Área | Limite |
|---|---|
| Formato do esquema | Um 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 subcampo | Todos os elementos Struct no mesmo campo StructArray partilham um esquema Struct predefinido. |
| A capacidade | max_capacity é obrigatório e limita o número de elementos Struct que uma entidade pode armazenar no campo StructArray. |
| Alterações no subcampo | Após a criação de um campo StructArray, não é possível adicionar subcampos a esse campo StructArray já existente. |
| Caminho do subcampo | Utilize 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 forma | Inserir um campo StructArray como uma matriz de objetos. Não utilize a sintaxe de caminho no interior de cargas de inserção. |
| Índices vetoriais | Um 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ções | As funções de campo não são suportadas para campos ou subcampos dentro de um campo StructArray. |
| Campos nulos | Os 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âmico | A 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
| Limite | Detalhes |
|---|---|
| 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 Struct | Suporte | Notas |
|---|---|---|
Array | Suportado | Defina o subcampo como DataType.BOOL. |
Array | Compatível | Defina o subcampo como DataType.INT8, DataType.INT16, DataType.INT32 ou DataType.INT64. |
Array | Compatível | Defina o subcampo como DataType.FLOAT ou DataType.DOUBLE. |
Array | Compatível | Defina o subcampo como « DataType.VARCHAR » e configure « max_length ». |
ArrayOfVector | Compatível | Defina o subcampo como « DataType.FLOAT_VECTOR » e defina « dim ». |
ArrayOfVector | Compatível | Defina o subcampo como « DataType.FLOAT16_VECTOR » e configure « dim ». |
ArrayOfVector | Compatível | Defina o subcampo como « DataType.BFLOAT16_VECTOR » e defina « dim ». |
ArrayOfVector | Compatível | Defina o subcampo como « DataType.INT8_VECTOR » e defina « dim ». |
ArrayOfVector | Compatível | Defina o subcampo como « DataType.BINARY_VECTOR » e defina « dim ». |
ArrayOfVector | Não suportado | Os subcampos de vetores esparsos não são suportados nos campos StructArray. |
Array | Não suportado | Utilize « VARCHAR », e não « String ». |
Array | Não suportado | Os subcampos JSON não são suportados nos campos StructArray. |
Array | Não suportado | Os subcampos de geometria e as funções GIS não são suportados nos campos StructArray. |
Array | Não suportado | Os subcampos de texto não são suportados nos campos StructArray. |
Array | Não suportado | Os subcampos «timestamptz» e as expressões específicas de hora não são suportados nos campos StructArray. |
Array, ArrayOfVector, Struct ou ArrayOfStruct | Não suportado | Os 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.
| Capacidade | Limite |
|---|---|
| Campo StructArray nulo | Suportado 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 Python | Utilize ` None ` para inserir um valor `StructArray` nulo em Python. Não utilize ` Null ` nem ` null`. |
| Âmbito do valor nulo | O valor nulo aplica-se a todo o campo StructArray. Por exemplo, chunks=None só é válido quando chunks é nulo. |
| Valor StructArray parcialmente nulo | Quando 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 StructArray | Suportado no Milvus 3.0.0 e versões posteriores. |
| Requisito de nulo para adição dinâmica | Um 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âmica | As 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
| Limite | Detalhes |
|---|---|
| Formato da carga útil | Inserir o campo StructArray como uma matriz de objetos Struct, como por exemplo chunks: [{"text": "...", "emb": [...]}]. |
| Nomes dos subcampos | Dentro de cada objeto Struct, utilize nomes de subcampos como text e emb, e não percursos como chunks[text]. |
| Alinhamento com o esquema | Cada elemento Struct deve corresponder ao esquema Struct. |
| Capacidade | O número de elementos Struct numa entidade não deve exceder max_capacity. |
| Dimensões do vetor | Os valores do vetor devem corresponder à dim configurada para os seus subcampos vetoriais. |
| Duplicação no modo de pesquisa | Se 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 pesquisa | Família de métricas | Nível de resultado |
|---|---|---|
| Pesquisa EmbeddingList | MAX_SIM, métricas « MAX_SIM_COSINE », « MAX_SIM_IP », « MAX_SIM_L2 » ou « MAX_SIM_* » binárias | Resultados ao nível da entidade. |
| Pesquisa ao nível do elemento | Métricas vetoriais regulares, tais como L2, IP, COSINE, HAMMING ou JACCARD | Resultados 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 pesquisa | Suporte e limites |
|---|---|
| Pesquisa básica no EmbeddingList | Suportada em subcampos vetoriais StructArray indexados com métric MAX_SIM*. Devolve resultados ao nível da entidade. |
| Pesquisa básica ao nível do elemento | Suportada em subcampos vetoriais do StructArray indexados com métricas vetoriais regulares. Pode devolver os deslocamentos dos elementos correspondentes. |
| Pesquisa por intervalo | Suportada 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 agrupamento | A 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íbrida | Uma 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 deslocamento | O 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.
Páginas relacionadas
Para criar um campo StructArray, consulte «Criar um campo StructArray».
Para inserir dados, leia Inserir dados em campos StructArray.
Para criar índices vetoriais e escalares, consulte «Indexar campos StructArray».
Para rever a sintaxe do filtro StructArray, consulte «Operadores StructArray».