Límites de StructArray

La compatibilidad con StructArray abarca la definición del esquema, las cargas útiles de inserción, la indexación, los modos de búsqueda y los filtros específicos de StructArray. Utiliza esta página como referencia de límites antes de confiar en el comportamiento de StructArray en entorno de producción.

La mayoría de los límites de StructArray provienen de una de estas tres fuentes: el modelo de esquema de StructArray, el modo de búsqueda que elijas para los subcampos vectoriales y la versión de Milvus en la que se ejecuta tu colección.

Resumen de los límites

ÁreaLímite
Forma del esquemaUn Struct solo se puede utilizar como tipo de elemento de un campo Array. Struct no es compatible como campo de colección de nivel superior.
Esquema de subcamposTodos los elementos Struct de un mismo campo StructArray comparten un esquema Struct predefinido.
La capacidadmax_capacity es obligatorio y limita el número de elementos Struct que una entidad puede almacenar en el campo StructArray.
Cambios en los subcamposUna vez creado un campo «StructArray», no se pueden añadir subcampos a dicho campo ya existente.
Ruta del subcampoUtiliza rutas del tipo structArray[subfield], como chunks[emb], para índices, objetivos de búsqueda, campos de salida y filtros. No utilices chunks.emb.
Inserción de formaInserta un campo StructArray como una matriz de objetos. No utilices la sintaxis de ruta dentro de las cargas útiles de inserción.
Índices vectorialesUn campo vectorial o un subcampo vectorial solo admite un índice. Utiliza subcampos vectoriales independientes para la búsqueda en EmbeddingList y la búsqueda a nivel de elemento.
FuncionesLas funciones de campo no son compatibles con los campos o subcampos dentro de un campo StructArray.
Campos nulosLos campos StructArray nulos están sujetos a restricciones de versión. Cuando se admiten, el valor nulo se aplica a todo el campo StructArray, no a un elemento Struct concreto de forma independiente.
Añadir un campo de forma dinámicaLa adición de un campo StructArray a una colección existente depende de la versión y requiere que el campo añadido sea nulo.

Límites del esquema

LímiteDetalles
«Struct» no es un tipo de campo de nivel superior.Crea un campo StructArray como « datatype=DataType.ARRAY » con « element_type=DataType.STRUCT » y « struct_schema ».
Todos los elementos comparten un mismo esquema.Cada elemento Struct de un campo StructArray sigue la misma lista de subcampos y los mismos tipos de datos de los subcampos.
max_capacity es obligatorio.El número de elementos Struct en una entidad no debe superar el valor de « max_capacity » configurado para el campo StructArray.
Los subcampos existentes son fijos.No se pueden añadir nuevos subcampos a un campo StructArray existente. Para cambiar el esquema de subcampos, elimine el campo StructArray y añádalo de nuevo con el esquema actualizado.
No se admiten StructArray anidados.Un campo «StructArray» no puede contener subcampos anidados de tipo « Array », « ArrayOfVector », « Struct » o « ArrayOfStruct ».
No se admiten funciones dentro de StructArray.No defina funciones de campo para campos StructArray ni para sus subcampos.

Para ver ejemplos de creación de esquemas, consulta «Crear un campo StructArray».

Tipos de datos admitidos para los subcampos

Los subcampos de StructArray se asignan a un almacenamiento físico de tipo matriz. En la siguiente tabla se enumeran los tipos físicos admitidos y no admitidos.

Tipo físico del subcampo de StructCompatibilidadNotas
ArrayCompatibleDefina el subcampo como « DataType.BOOL ».
ArrayCompatibleDefina el subcampo como « DataType.INT8 », « DataType.INT16 », « DataType.INT32 » o « DataType.INT64 ».
ArrayCompatibleDefina el subcampo como DataType.FLOAT o DataType.DOUBLE.
ArrayCompatibleDefina el subcampo como « DataType.VARCHAR » y establezca « max_length ».
ArrayOfVectorCompatibleDefina el subcampo como « DataType.FLOAT_VECTOR » y establezca « dim ».
ArrayOfVectorCompatibleDefina el subcampo como « DataType.FLOAT16_VECTOR » y establezca « dim ».
ArrayOfVectorCompatibleDefina el subcampo como « DataType.BFLOAT16_VECTOR » y establezca « dim ».
ArrayOfVectorCompatibleDefina el subcampo como « DataType.INT8_VECTOR » y establezca « dim ».
ArrayOfVectorCompatibleDefina el subcampo como « DataType.BINARY_VECTOR » y establezca « dim ».
ArrayOfVectorNo compatibleLos subcampos de vectores dispersos no son compatibles con los campos StructArray.
ArrayNo compatibleUtilice « VARCHAR », no « String ».
ArrayNo compatibleLos subcampos JSON no son compatibles con los campos StructArray.
ArrayNo compatibleLos subcampos de geometría y las funciones SIG no son compatibles con los campos StructArray.
ArrayNo compatibleLos subcampos de texto no son compatibles con los campos StructArray.
ArrayNo compatibleLos subcampos «timestamptz» y las expresiones específicas de hora no son compatibles con los campos StructArray.
Array, ArrayOfVector, Struct o ArrayOfStructNo compatibleLos campos StructArray no admiten subcampos anidados de tipo matriz, matriz vectorial, Struct o matriz de Struct.

Límites de esquemas nulos y dinámicos

El comportamiento de los StructArray nulos y la adición dinámica de campos StructArray dependen de la versión.

CapacidadLímite
Campo StructArray nuloCompatible con Milvus 3.0.0 y versiones posteriores. Establece la opció nullable=True en el StructArray padre; no configures los subcampos de Struct como nulos de forma independiente.
Valor nulo en PythonUtiliza ` None ` para insertar un valor nulo de `StructArray` en Python. No utilices ` Null ` ni ` null`.
Ámbito de «null»El valor nulo se aplica a todo el campo StructArray. Por ejemplo, chunks=None solo es válido cuando chunks es nulo.
Valor de StructArray parcialmente nuloCuando un campo StructArray contiene un valor de matriz válido, no mezcles matrices de subcampos nulas con matrices de subcampos válidas en el mismo valor.
Añadir dinámicamente un campo StructArrayCompatible con Milvus 3.0.0 y versiones posteriores.
Requisito de nulidad para la adición dinámicaUn campo StructArray añadido a una colección existente debe ser nulo, ya que las entidades existentes no tienen ningún valor para el nuevo campo.
Entidades existentes tras la adición dinámicaLas entidades existentes devuelven un valor « null » para el campo StructArray añadido.

Milvus 3.0.0 y versiones posteriores admiten campos StructArray nulos, matrices vectoriales nulas y la adición dinámica de campos StructArray tanto en implementaciones autónomas como distribuidas. Las versiones anteriores de Milvus no admiten estas capacidades.

En Zilliz Cloud, estas capacidades están disponibles en los clústeres bajo demanda que ejecutan Milvus 3.0.0 o versiones posteriores. Los clústeres de servicio no las admiten.

Para ver ejemplos de inserción con campos StructArray nulos, consulta «Insertar datos en campos StructArray».

Límites de inserción

LímiteDetalles
Forma de la carga útilInserte el campo StructArray como una matriz de objetos Struct, como, por ejemplo, chunks: [{"text": "...", "emb": [...]}].
Nombres de subcamposDentro de cada objeto Struct, utilice nombres de subcampos como text y emb, no rutas como chunks[text].
Alineación con el esquemaCada elemento Struct debe coincidir con el esquema de Struct.
CapacidadEl número de elementos Struct en una entidad no debe superar max_capacity.
Dimensiones del vectorLos valores de los vectores deben coincidir con el dim configurado para sus subcampos vectoriales.
Duplicación en el modo de búsquedaSi necesitas tanto la búsqueda en EmbeddingList como la búsqueda a nivel de elemento, escribe los vectores en dos subcampos vectoriales separados.

Límites de índices y métricas

Un subcampo vectorial de tipo StructArray puede indexarse tanto para la búsqueda en EmbeddingList como para la búsqueda a nivel de elemento. Un mismo subcampo vectorial no puede utilizar ambas familias métricas, ya que cada campo vectorial o subcampo vectorial solo admite un índice.

Modo de búsquedaFamilia de métricasNivel de resultado
Búsqueda en EmbeddingListMAX_SIM, métricas « MAX_SIM_COSINE », « MAX_SIM_IP », « MAX_SIM_L2 » o métricas binarias « MAX_SIM_* »Resultados a nivel de entidad.
Búsqueda a nivel de elementoMétricas vectoriales habituales, como L2, IP, COSINE, HAMMING o JACCARDResultados a nivel de elemento que pueden incluir la posición del elemento coincidente.

Utilice subcampos vectoriales independientes cuando se requieran ambos modos. Por ejemplo, utilice chunks[emb_list_vector] para la búsqueda en EmbeddingList y chunks[emb] para la búsqueda a nivel de elemento.

Los subcampos vectoriales de StructArray cuentan como subcampos vectoriales a la hora de planificar el esquema de la colección. Mantenga el número total de campos vectoriales y subcampos vectoriales dentro de los límites de su versión de destino y su nivel de servicio.

Para conocer la matriz de tipos de índice y de métricas compatibles, consulta Campos StructArray de índice.

Límites de búsqueda

Comportamiento de la búsquedaCompatibilidad y límites
Búsqueda básica en EmbeddingListCompatible con subcampos vectoriales de StructArray indexados con métric MAX_SIM* es. Devuelve resultados a nivel de entidad.
Búsqueda básica a nivel de elementoCompatible con subcampos vectoriales de StructArray indexados con métricas vectoriales regulares. Puede devolver las coordenadas de los elementos coincidentes.
Búsqueda por rangoCompatible según el modo de búsqueda y la compatibilidad con índices y métricas de la versión de destino. Para conocer el comportamiento del rango de búsqueda híbrida en solicitudes de StructArray a nivel de elemento, consulta tu versión de destino.
Búsqueda por agrupaciónLa búsqueda agrupada a nivel de elemento puede devolver posiciones. El comportamiento de agrupación en la búsqueda híbrida para solicitudes de StructArray a nivel de elemento depende de la versión.
Búsqueda híbridaUna solicitud de búsqueda híbrida solo puede incluir solicitudes de subcampos vectoriales de StructArray cuando la versión de destino admita esa combinación de búsqueda. Cada solicitud sigue la familia de métricas del subcampo vectorial indexado.
Salida de desplazamientoEl desplazamiento está disponible para los resultados de búsqueda a nivel de elemento. La búsqueda en EmbeddingList devuelve resultados a nivel de entidad y no utiliza los desplazamientos de elementos como unidad principal de resultado.

Límites de filtros y operadores

El filtrado escalar de StructArray se gestiona mediante operadores de StructArray, como « element_filter » y la familia « MATCH_* ». La matriz detallada de compatibilidad con predicados se encuentra en «Operadores de StructArray».

A grandes rasgos:

  • Utilice ` $[subfield] ` únicamente dentro de operadores de StructArray.

  • Utilice subcampos escalares para los predicados escalares.

  • No utilices subcampos vectoriales como entradas de predicados escalares de « $[...] ».

  • La sintaxis de ruta JSON, las funciones JSON, las funciones de contenedores de matrices, las funciones de coincidencia de texto, las funciones de geometría/SIG y las expresiones Timestamptz no son compatibles con los predicados a nivel de elemento de StructArray.

  • Es preferible utilizar comparaciones booleanas explícitas, como ` $[has_code] == true `, en lugar de expresiones booleanas simples.

  1. Para crear un campo StructArray, consulta Crear un campo StructArray.

  2. Para insertar datos, consulta Insertar datos en campos StructArray.

  3. Para crear índices vectoriales y escalares, consulta «Índices de campos StructArray».

  4. Para repasar la sintaxis de los filtros de StructArray, consulta «Operadores de StructArray».